2013-12-10 63 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