11

考虑以下代码:

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

4

2 回答 2

9

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

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

强调我的。

于 2012-10-31T08:42:46.370 回答
1

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

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

于 2012-10-31T08:43:13.590 回答