Unterschied zwischen der funktionalen Cast-Notation T(x) und static_cast(x)C++

Programme in C++. Entwicklerforum
Anonymous
 Unterschied zwischen der funktionalen Cast-Notation T(x) und static_cast(x)

Post by Anonymous »

(Ich weiß, dass dies einigen anderen Fragen hier sehr ähnlich ist, aber ich habe keine gefunden, die aus sprachlicher Sicht speziell dieses genaue Detail beantworten würde. Die meisten Beinahe-Duplikate fragen nur, ob sie static_cast über Umwandlungen im funktionalen Stil verwenden sollten (Antwort: Ja) oder den Unterschied zwischen static_cast und C-Stil Umwandlungen.)

In C++ scheinen die folgenden zwei Umwandlungen sehr ähnlich zu sein:

Code: Select all

template auto convert1(U&& u) {
return T( std::forward(u) );
}

template auto convert2(U&& u) {
return static_cast( std::forward(u) );
}
Gibt es irgendein Unterschied für alle Typen T, U; Oder sind sie in der Wirkung zu 100 % identisch?

Wenn sie unterschiedlich sind, würde ich mich über einige Beispiele von Stellen in der Standardbibliothek freuen, an denen der subtile Unterschied relevant ist. (Ich meine damit, wie std::make_shared(args...) angegeben wird, um sein Objekt mit T(args...) anstelle von T{args...} zu erstellen, da dort ein subtiler Unterschied zwischen T() und T{} besteht.)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post