这里很困惑。即使在初始化列表中传递this
,程序也会成功编译并运行。
我的印象是,在此处传递 this
时,编译器应该会给出一些错误,因为此处尚未创建对象。
两个cout
的输出是相同的;即他们拥有相同的地址。
我知道这不是正确的编程方法,但是这里到底发生了什么?
class foo
{
public:
foo():myself( this ) {}
foo * myself;
};
int main()
{
foo f;
cout<<f.myself<<endl;
cout<<&f<<endl;
return 0;
}
最佳答案
即使对象尚未完全初始化,其地址也是已知的并且可以分配给指针。
虽然这个习惯用法并不常见,但我可以看到它被用于初始化链接列表。
关于c++ - 使用 this 指针初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324813/