ich gelernt, dass in C++,Function-Casts vs. Konstruktor
typedef foo* mytype;
(mytype) a // C-style cast
und
mytype(a) // function-style cast
das gleiche tun.
Aber ich bemerke, dass die Funktion-Stil-Besetzung die gleiche Syntax wie ein Konstruktor teilen. Gibt es nicht zweideutige Fälle, in denen wir nicht wissen, ob es sich um eine Besetzung oder einen Konstruktor handelt?
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?
Eigentlich in dem Beispiel zeigen Sie * beide * cases einen 'std :: string' Konstruktor aufrufen. Der * selbe * Konstruktor sogar. –
Hinweis: In C++ sollten Sie generell die expliziten Umwandlungen 'static_cast',' reininterpret_cast', 'const_cast',' dynamic_cast', 'static_pointer_cast',' reininterpret_pointer_cast', 'const_pointer_cast' und' dynamic_pointer_cast' (und 'move' & 'Forward' - ja, sie * sind nur Cast *) über C-Style-Casts. Sie sind einfacher in Code zu suchen, expliziter in Bezug auf Intention und sicherer (schlimmster Cast von C-Style-Cast ist das Erzeugen von 'reininterpret_cast', gefolgt von' const_cast' zum Beispiel). –