标签: this-pointer

对于级联成员函数调用,为什么我需要返回引用?为什么不只是这个指针足够了?

#include <iostream>

using namespace std;

class armon {
    int a;
    int b;

public:
    armon(int newA, int newB) : a(newA), b(newB) {}

    armon setA(int newA) {
        a = newA;
        return *this;
    }

    armon setB(int newB) {
        b = newB;
        return *this;
    }

    void print(void) { cout << a << endl << b; }
};

int main() {
    armon s(3, 5);

    s.setA(8).setB(9);

    s.print();
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我不能只用这个指针返回对象来进行级联函数调用?
  2. 为什么我需要返回对象的引用?
  3. 甚至会做什么?

c++ reference function cascading this-pointer

0
推荐指数
1
解决办法
796
查看次数

关于"this"指针的指针算术

在C++的"this"指针上执行指针运算有什么合法和/或有趣的用途,如果有的话?

为了让SE对这个问题的长度感到满意,我将包含一些相关的代码.

class Foo
{
public:
    Foo(bool terminate = false)
        : _data(terminate ? -1 : 0)
    {}

    void Bar(void)
    {
        if (_data >= 0)
        {
            _data++;
            this[1].Bar();
        }
    }

private:
    int _data;
};

void main()
{
    std::vector<Foo> vec;
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo());
    vec.push_back(Foo(true));

    vec[2].Bar();
}
Run Code Online (Sandbox Code Playgroud)

c++ this pointer-arithmetic this-pointer c++11

0
推荐指数
1
解决办法
290
查看次数

这个指针是0xfffffffc,潜在原因?

我正在编译Crypto ++库-O3.根据Undefined Behavior Sanitizer(UBsan)和Address Sanitizer(Asan),它可以.该程序运行良好-O2(-O3在许多平台上).

根据Valgrind的说法,它也可以-O2.在-O3,Valgrind死于"你的程序只是试图执行Valgrind不理解的指令".我很确定这是因为SSE4指令和矢量化-O3.

但是,我在某些平台上遇到了崩溃-O3.这台特殊的机器是Fedora 22 i686,它有GCC 5.2.1.相关框架显示this=0xfffffffc:

Program received signal SIGSEGV, Segmentation fault.
0x0807be29 in CryptoPP::DL_GroupParameters_IntegerBased::GetEncodedElementSize
    (this=0xfffffffc, reversible=0x1) at gfpcrypt.h:55
55      unsigned int GetEncodedElementSize(bool reversible) const {return GetModulus().ByteCount();}
Run Code Online (Sandbox Code Playgroud)

我能说的最好,那个地址周围没有任何东西:

(gdb) info shared
From        To          Syms Read   Shared Object Library
0xb7fdd860  0xb7ff6b30  Yes (*)     /lib/ld-linux.so.2
0xb7eb63d0  0xb7f7a344  Yes (*)     /lib/libstdc++.so.6
0xb7e005f0  0xb7e32bd8  Yes (*)     /lib/libm.so.6
0xb7951060  0xb7980cc4  Yes (*)     /lib/libubsan.so.0 …
Run Code Online (Sandbox Code Playgroud)

c++ memory gdb this-pointer

0
推荐指数
1
解决办法
687
查看次数

为什么在C++中不推荐使用"this"作为非const

为什么this在C++中被弃用?thisC++中的指针this与Java中的指针有何不同?

维基百科错了

早期版本的C++会让this指针改变; 通过这样做,程序员可以改变方法正在处理的对象.这个功能最终被弃用了,现在C++中的这个是const.

c++ this deprecated this-pointer

-2
推荐指数
3
解决办法
259
查看次数