2013-12-10 45 views
1

我有一个快速的问题在gcc 4.8中启用了flag -std = C++ 11。 我可以做到这一点,它工作正常。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”。

回答

1

如果你写

struct Foo 
{ 
    Bar bar { this }; 
}; 

那无异:

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

因此,如果第二个是有道理的,所以做的第一。

1

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

+0

它只能被使用一次“this”是有效的封装方式。只有通过测试来获得StupidClass的方法。这只是出于我抄袭和粘贴在错误的地方。 – user2445735