Vom Standard [§ 5, # 7]
In einigen Kontexten unevaluierten Operanden erscheinen (5.2.8, 5.3.3, 5.3.7, 7.1.6.2). Ein unevaluierter Operand wird nicht ausgewertet. [Anmerkung: In einem unausgewerteten Operanden kann ein nicht-statisches Klassenmitglied den Namen (5.1) haben und Die Benennung von Objekten oder Funktionen erfordert für sich nicht die Angabe einer Definition (3.2). - Endnote]
Die Kontexte, in denen seine verwendet werden:
- Typenbezeichnung [Abschnitt 5.2.8]
- Sizeof Operator [5.3.3]
- noexcept [Abschnitt 5.3. 7]
- Typdeklarierer Für zB
decltype(declval<T>())
[Abschnitt 7.1.6.2]
Also, in Laien Begriffen (Von dem, was ich verstehe) kann es nicht als eigenständiger Ausdruck wie a + b;
verwendet werden.
Wie pro Kommentar von Massa unten:
In den oben genannten Zusammenhängen ist der Ausdruck, der die unevaluierten Operand bezeichnet wird entfaltet, so dass die Art des Ergebnisses (und im Fall von sizeof, die Größe dieses Typs) kann bestimmt werden, aber die Auswertung des Ausdrucks wird nie in das endgültige Programm aufgenommen.
Beispiel: typeof(std::cout << "1\n") &x = std::cout;
wird nie generiert den Code zum Drucken "1 \ n" auf die Standardausgabe.
Suche nach „unevaluierten Operanden“ in C++ 11 –