我瞭解到,在C++中,功能樣式轉換與構造
typedef foo* mytype;
(mytype) a // C-style cast
和
mytype(a) // function-style cast
做同樣的事情。
但我注意到函數式轉換與構造函數共享相同的語法。 是不是有不明確的情況下,我們不知道它是一個演員或建設者?
char s [] = "Hello";
std::string s2 = std::string(s); // here it's a constructor but why wouldn't it be ...
std::string s3 = (std::string) s; // ... interpreted as a function-style cast?
實際上,在您顯示的示例中*兩個*個案都會調用一個'std :: string'構造函數。 *相同*構造函數。 –
注意:在C++中,你通常應該更喜歡明確的轉換static_cast,reinterpret_cast,const_cast,dynamic_cast,static_pointer_cast,reinterpret_pointer_cast,const_pointer_cast和dynamic_pointer_cast(以及move& '前鋒' - 是的,他們*只是在C風格演員陣容*上)。他們更容易在代碼中搜索,對於意圖和安全性更加明確(例如,最糟糕的C風格演員陣容是生成'reinterpret_cast',後面跟着'const_cast')。 –