2010-12-21 20 views
0

Mögliche Duplizieren:
C++: What's the difference between function(myVar) and (function)myVar ?Gibt es einen Unterschied zwischen int (floatvar) und (int) floatvar?

Ich habe beide Varianten dieser Umwandlungen gesehen und verwendet:

int(floatvar) 

(int)floatvar 

Gibt es einen Unterschied zwischen den beiden? Gibt es irgendwelche Vorlieben darüber, wann was zu verwenden ist?

+0

Ich entfernte das C-Tag, da dies eine C++ - Frage ist. Die erste Variante ist in C nicht relevant, außer Sie möchten eine Funktion namens "int" mit dem Parameter "floatvar" aufrufen? – onemasse

Antwort

9

Es gibt keinen Unterschied zwischen ihnen. (int)floatvar ist C Art, die Besetzung zu tun, wo int(floatvar) der C++ Weg ist (obwohl es besser ist, explizit zu sein und static_cast<> zu verwenden).

+1

Es könnte auch interessant für die Leser sein, warum sie eingeführt wurde. –

3

Nein, es ist das Gleiche.

Wie auch immer, für C++ Besetzung static_cast ist vorzuziehen.

1

Die Notation ist eine allgemeine für jeden Typ, und die Tatsache, dass Sie es mit int tun können, bedeutet, dass es in Vorlagen funktioniert.

template < typename T, typename U > 
T makeTFromU(U u) 
{ 
    return T(u); 
} 

Ok, das ist ein sehr einfacher Fall einen Punkt zu zeigen, aber es funktioniert auch, wenn T int und U ist ein Typ, in int umgewandelt werden kann.

Ein Beispiel in der Standardbibliothek wäre Vektor. Wenn Sie diesen Konstruktor verwenden, baut er ein Element aus dem Parameter und die anderen durch copy-constructor aus dem ersten Konstruktor.

std::vector<int> v(20, x); 

so wird es wahrscheinlich intern aufrufen int (x), um die erste zu erstellen, um dann in die 20 Elemente zu kopieren.