Почему токены заключены в скобки, а не в выражения r-значения?

Рассмотрим следующий код:

#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-значение) выражение, которое затем увеличивается?

11

Решение

Поскольку в стандарте прямо указано, что в 3.4.2 пункт 6:

Заключенное в скобки выражение — это первичное выражение, тип и
значения идентичны значениям вложенного выражения. Присутствие
скобок не влияет на то, является ли выражение lvalue.

Акцент мой.

9

Другие решения

Нет, скобки не имеют никакого значения, кроме изменения порядка операций.

Для создания значения вам нужно использовать специальную функцию std::move(x),

1

По вопросам рекламы [email protected]