2

在这里糊涂了。即使传入this初始化列表,程序也正在编译并成功运行。我的印象是,在传递this到这里时,编译器应该给出一些错误,因为这里没有创建对象。

两个couts的输出是一样的;即他们持有相同的地址。

我知道这不是正确的编程方法,但这里到底发生了什么?

    class foo
    {
            public:
            foo():myself( this ) {}
            foo * myself;
    };


    int main()
    {
            foo f;
            cout<<f.myself<<endl;   
            cout<<&f<<endl;
            return 0;
    }
4

1 回答 1

2

即使对象还没有完全初始化,它的地址是已知的并且可以分配给一个指针。

虽然这个习语并不常见,但我可以看到它被用于例如链表的初始化。

于 2012-04-25T22:38:30.483 回答