用这个c ++ 11类内成员初始化

时间:2013-12-10 09:23:08

标签: c++ c++11 member-initialization

我在gcc 4.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”。

2 个答案:

答案 0 :(得分:1)

如果你写

struct Foo
{
    Bar bar { this };
};

与以下内容没有区别:

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

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

答案 1 :(得分:1)

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