Betrachten Sie den folgenden Code ein:Warum sind Token, die in Klammern eingeschlossen sind, keine r-Wert-Ausdrücke?
#include <iostream>
struct Foo
{
Foo() : bar(0) {}
int bar;
};
int main()
{
Foo foo;
++(foo.bar);
std::cout<< foo.bar << std::endl;
system("pause");
return 0;
};
Warum foo.bar
-1 wertet?
Erstellen die Klammern in (foo.bar)
einen unbenannten (r-Wert) Ausdruck, der dann inkrementiert wird?
Nein, verwechseln Sie das mit einer anderen Sprache, in der 'f (x)' und 'f ((x))' anders sind? –
@BoPersson Aber es gibt einige Kontexte, in denen es einen Unterschied macht. Zum Beispiel können 'declltype (x)' und 'declltype ((x))' anders sein. – juanchopanza
@juanchopanza: Verdammt ... das ist knifflig! –