Почему жетоны, заключенные в круглые скобки, не являются выражениями r-value?
Рассмотрим следующий код:
#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-value), которое затем увеличивается?
Ответы
Ответ 1
Поскольку стандарт явно указывает, что в пункте 3.4.2 параграф 6:
Обозначенное в скобках выражение является первичным выражением, тип и значение идентичны значениям прилагаемого выражения. Наличие круглых скобок не влияет на то, является ли выражение lvalue.
внимание мое.
Ответ 2
Нет, скобки не имеют никакого значения, кроме изменения порядка операций.
Чтобы создать rvalue, вам нужно использовать специальную функцию std::move(x)
.