如何将“this”指针指向字段?

时间:2016-04-14 18:56:02

标签: c++ class pointers this

据我所知,“this”指针是编译器插入函数的参数,如下所示:

class Sample {
private:
    int a;
public:
    void setA(int a) {
        this->a = a;
    }
};

Sample ob;
ob.setA(5); -> ob.setA(&ob, 5);

class Sample {
private:
    int a;
public:
    void setA(Sample* this, int a) {
        this->a = a;
    }
};

顺便说一下,我发现了一些令人困惑的代码,它将“this”指针分配给const字段。 (请参阅下文)

class Test {
    int data;
public: 
    Test* const test = this;
    Test(int data = 1) : data(data) { }
    Test(Test &test) : data(test.data) { }  
};
(It has no compile Errors and runs well!)

如果“this”指针是通过函数传递的,那又怎么样? 我不知道.. 你能给我一些建议吗?我很感谢您的任何回复。

2 个答案:

答案 0 :(得分:2)

此语法:

Test* const test = this;

来自C ++ 11。这意味着在任何尚未明确初始化test的非复制构造函数中“初始化thistest

因此,此代码在构造函数中执行,this完全有效。但是,进行此类初始化的好处尚不清楚,并且依赖于test的使用可能会很危险。

答案 1 :(得分:0)

类的属性(在本例中为Test.test)由编译器生成的代码隐式初始化。有一个函数,它确实接收到this指针,但它都是由编译器生成的,这就是你无法看到它的原因。