Рассмотрим следующий код:
#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;
};
Почему foo.bar
оценить до 1?
Разве в скобках (foo.bar)
создать безымянное (r-значение) выражение, которое затем увеличивается?
Поскольку в стандарте прямо указано, что в 3.4.2 пункт 6:
Заключенное в скобки выражение — это первичное выражение, тип и
значения идентичны значениям вложенного выражения. Присутствие
скобок не влияет на то, является ли выражение lvalue.
Акцент мой.
Нет, скобки не имеют никакого значения, кроме изменения порядка операций.
Для создания значения вам нужно использовать специальную функцию std::move(x)
,