为什么用括号括起来的令牌不是r值表达式?

时间:2012-10-31 08:36:42

标签: c++ parentheses rvalue

请考虑以下代码:

#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值)表达式,然后递增?

2 个答案:

答案 0 :(得分:9)

因为标准在3.4.2第6段中明确指出:

  

带括号的表达式是一个主要表达式,其类型和   值与所附表达式的值相同。 存在   括号不影响表达式是否为左值。

强调我的。

答案 1 :(得分:1)

不,除了改变操作顺序之外,括号没有任何意义。

要创建右值,您需要使用特殊函数std::move(x)