请考虑以下代码:
#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值)表达式,然后递增?
答案 0 :(得分:9)
因为标准在3.4.2第6段中明确指出:
带括号的表达式是一个主要表达式,其类型和 值与所附表达式的值相同。 存在 括号不影响表达式是否为左值。
强调我的。
答案 1 :(得分:1)
不,除了改变操作顺序之外,括号没有任何意义。
要创建右值,您需要使用特殊函数std::move(x)
。