我有接受Material
類型的對象的構造:標記構造爲__explicitly__需要一個對象類型
SomeClass::SomeClass(const Material& mat) ;
然而,Material
允許施工由Vector
:
Material::Material(const Vector& v) ;
因此,SomeClass
可以允許通過建設Vector
:
SomeClass m(vec) ; // valid, since vec is constructed to a Material first,
// then is passed to the SomeClass(Material) ctor
然而,在「在腳下拍攝自己」不止一次這種類型的構建函數(在同一個項目在不同的班級!)我想禁止建設SomeClass
通過Vector
對象直接,而不是總是需要代替傳遞Material
。
有沒有辦法做到這一點?不知怎的,它認爲它與explicit
關鍵字有關。
¤您可以將'Material :: Material'構造函數標記爲'explicit'。在C++ 03中,你還必須確保'Vector'類中沒有'operator Material'。然而,在C++ 11中,你也可以將這樣的轉換運算符標記爲「顯式」(最好是恕我直言,以避免轉換運算符,而是通常通過命名函數提供轉換)。乾杯&hth。, –