2017-07-19 38 views
1

一般來說,我聽說在一個參數的構造函數上使用顯式關鍵字是一種很好的做法。但是,從C++ 11開始,具有多個參數的構造函數可用於隱式轉換。因此,將explicit關鍵字應用於> 0參數的所有構造函數是否是一種好的做法?C++中有多個參數的顯式關鍵字和構造函數11

回答

0

顯式的一般規則是,你是否希望這個構造函數被隱式調用?

如果是,請不要使其明確。

如果否,則明確表示。

對於1個參數ctors,如果從該類型轉換爲在需要時將int轉換爲double爲無損和無害,請使其隱含。

對於> 1個參數ctors,確定是否需要基於{}的構造工作。有時候這是一個好主意,有時候是一個壞主意。

在C++ 11和14中,當無法移動或複製類型時,爲了從函數返回值,需要構造{}。在某些情況下,如果您想要避免「隱含的{}使用情況」,您將使用標籤類型使{}更明確。

在C++ 17中,真正需要{}的理由很少,因爲prvalues不再是對象而是構造指令;這意味着return T(blah)不會在返回T的函數中移動/複製T,而是從blah構建方向。

如果正是你想要阻止{}是見仁見智的事情,不適合SO Q & A.

相關問題