1

Folgendes ist der betreffende Code.Assoziativität zwischen Typ und. in Visual Studio

void SomeClass::Init(const vector<string>& args) { 
    int argc = (int)args.size(); 
    //... 
} 

Ich arbeite in Visual Studio 2015 Update 3 unter Windows 7 64-Bit.

Meine Frage ist: nach meinem Verständnis von Operator Assoziativität, Typ Cast (Int) und Member Selektor. hat die gleiche Priorität (siehe Screenshot unten, Auszug aus "C++ Primer, 5ed"), so dass die Bewertungsreihenfolge durch Assoziativität entschieden werden sollte. Aber die Assoziativität dieser Ebene bleibt bestehen, dh der Ausdruck wird von links nach rechts ausgewertet. So wird zuerst (int) args ausgewertet, indem args in ein int umgewandelt wird. Dann versucht die int-Version von args, ihre Größenfunktion aufzurufen, die nicht existiert und daher einen Kompilierungsfehler verursachen sollte. Visual Studio 2015 meldet jedoch keinen Fehler und wird wie erwartet ausgeführt: Der Ausdruck auf der rechten Seite ruft zuerst die Funktion size() auf und konvertiert dann den zurückgegebenen Wert in int. Warum? Ist mein Verständnis von Assoziativität falsch oder fehlt mir etwas? Danke für Ihre Hilfe.

enter image description here

+0

Was Sie verwenden, ist nicht Funktions-Cast, sondern C-Style-Cast, die unterschiedliche Priorität mit Member Access Operator hat. Siehe [hier] (http://en.cppreference.com/w/cpp/language/operator_precedence). – songyuanyao

+0

@songyuanyao: Danke. Du hast recht. Macht es Ihnen etwas aus, Ihre Idee in einer Antwort auf meine Frage zu schreiben? – user5280911

Antwort

1

Beachten Sie, dass als Mitglied Zugang Betreiber was Sie verwenden ist nicht function cast, aber c-style cast, die precedence niedriger aufweist.

Also (int)args.size() entspricht (int) (args.size()) und funktioniert gut.

Verwandte Themen