据我所知,“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”指针是通过函数传递的,那又怎么样? 我不知道.. 你能给我一些建议吗?我很感谢您的任何回复。
答案 0 :(得分:2)
此语法:
Test* const test = this;
来自C ++ 11。这意味着在任何尚未明确初始化test
的非复制构造函数中“初始化this
到test
。
因此,此代码在构造函数中执行,this
完全有效。但是,进行此类初始化的好处尚不清楚,并且依赖于test
的使用可能会很危险。
答案 1 :(得分:0)
类的属性(在本例中为Test.test
)由编译器生成的代码隐式初始化。有一个函数,它确实接收到this
指针,但它都是由编译器生成的,这就是你无法看到它的原因。