1
一般來說,我聽說在一個參數的構造函數上使用顯式關鍵字是一種很好的做法。但是,從C++ 11開始,具有多個參數的構造函數可用於隱式轉換。因此,將explicit關鍵字應用於> 0參數的所有構造函數是否是一種好的做法?C++中有多個參數的顯式關鍵字和構造函數11
一般來說,我聽說在一個參數的構造函數上使用顯式關鍵字是一種很好的做法。但是,從C++ 11開始,具有多個參數的構造函數可用於隱式轉換。因此,將explicit關鍵字應用於> 0參數的所有構造函數是否是一種好的做法?C++中有多個參數的顯式關鍵字和構造函數11
顯式的一般規則是,你是否希望這個構造函數被隱式調用?
如果是,請不要使其明確。
如果否,則明確表示。
對於1個參數ctors,如果從該類型轉換爲在需要時將int
轉換爲double
爲無損和無害,請使其隱含。
對於> 1個參數ctors,確定是否需要基於{}
的構造工作。有時候這是一個好主意,有時候是一個壞主意。
在C++ 11和14中,當無法移動或複製類型時,爲了從函數返回值,需要構造{}
。在某些情況下,如果您想要避免「隱含的{}
使用情況」,您將使用標籤類型使{}
更明確。
在C++ 17中,真正需要{}
的理由很少,因爲prvalues不再是對象而是構造指令;這意味着return T(blah)
不會在返回T
的函數中移動/複製T
,而是從blah
構建方向。
如果正是你想要阻止{}
是見仁見智的事情,不適合SO Q & A.