Question

Consider the following code:

#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;
};

Why does foo.bar evaluate to 1?

Doesn't the parentheses in (foo.bar) create an unnamed (r-value) expression which is then incremented?

Was it helpful?

Solution

Because the standard explicitly states that in 3.4.2 para 6:

A parenthesized expression is a primary expression whose type and value are identical to those of the enclosed expression. The presence of parentheses does not affect whether the expression is an lvalue.

emphasis mine.

OTHER TIPS

No, parenthesis do not have any meaning besides changing the order of operations.

To create an rvalue you need to use special function std::move(x).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top