C++ c++;11使用此

C++ c++;11使用此,c++,c++11,member-initialization,C++,C++11,Member Initialization,在GCC4.8中,我有一个快速的问题,其中启用了-std=c++11标志。 我能做到,而且效果很好 class Test; class StupidClass { public: StupidClass(Test *test) {} }; class Test { StupidClass c = StupidClass(/*this is the part in question*/ this); }; 我想知道c++11在类内成员初始化中使用“this”是否有效 stru

在GCC4.8中,我有一个快速的问题,其中启用了-std=c++11标志。 我能做到,而且效果很好

class Test;
class StupidClass {

public:
    StupidClass(Test *test) {}
};

class Test {
    StupidClass c = StupidClass(/*this is the part in question*/ this);
};
我想知道c++11在类内成员初始化中使用“this”是否有效

struct Foo
{
    Bar bar { this };
};
这与:

struct Foo
{
    Foo() : bar(this) { }
    Bar bar;
};

因此,如果第二个是有意义的,那么第一个也是有意义的。

它是有效的,但您需要小心,因为这还不是完全有效的。存储指针或引用也可以,使用在接收指针或引用之前声明的成员也可以。

只有当“this”以封装方式有效时,才能使用它。获得StupidClass的唯一方法是通过测试。这是我在错误的地方复制粘贴的结果。