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