C++ 如何才能分配“;这";指向字段的指针?
据我所知,“this”指针是编译器插入函数的参数,如下所示:C++ 如何才能分配“;这";指向字段的指针?,c++,class,pointers,this,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* thi
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字段。(请参阅下文)
如果“this”指针确实是通过函数传递的,那怎么可能呢?
我不知道。。
你能给我一些建议吗?非常感谢您的回复。类的属性(
Test.Test,在本例中为)由编译器生成的代码隐式初始化。有一个函数,它确实接收这个
指针,但它都是由编译器生成的,这就是为什么您看不到它的原因。此语法:
Test* const test = this;
来自C++11。它意味着“在任何尚未显式初始化测试的非复制构造函数中,将测试初始化为此”
因此,此代码在构造函数内执行,此
完全有效。但是,进行这种初始化的好处还不清楚,依赖于test
的使用可能会很危险。您想解决什么问题?等号并不总是意味着赋值。它可能意味着许多不同的事情,这取决于上下文。在本例中,它的意思是“初始化”。这里有另一种让人困惑的方式,将值“赋值”给常量变量:const int a=5代码>好。。我只是想知道它是如何工作的。Test*const Test=this代码>不是作业。这是一个初始化。“显式”一词似乎不对:在一些已经隐式初始化了test
的构造函数中,它不会将test
初始化为this
:编译器生成的复制构造函数会很高兴地复制test
@hvd的值,当然,我不是指复制构造函数。让我说清楚。
Test* const test = this;