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.
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
@songyuanyao: Danke. Du hast recht. Macht es Ihnen etwas aus, Ihre Idee in einer Antwort auf meine Frage zu schreiben? – user5280911