跟进。是否定义了返回引用x ++?

时间:2010-03-06 01:56:57

标签: c++ return defined post-increment

我最近问了问题Is the behavior of return x++; defined?

结果是关于我的预期,但让我想到了类似的情况。

如果我要写

class Foo
{   
  ...   
  int x;   
  int& bar() { return x++; }
};

bar现在返回一个int引用,是否定义了此行为?如果上一个问题的答案字面上是真的,而不仅仅是对正在发生的事情的方便抽象,那么看起来你会返回一个堆栈变量的引用,它会在执行返回后立即被销毁。

如果它只是一个抽象,我有兴趣知道后增量实际保证了什么行为。

2 个答案:

答案 0 :(得分:5)

不,你不能这样做,因为那会返回对临时的引用。

答案 1 :(得分:0)

您的代码将生成compilation error。但是,如果将后增量更改为预增量,则可以正常工作。 x的值递增,然后返回对此修改后的x的引用。

当前代码的问题在于您正在尝试修改临时代码,因为它们是临时对象,所以不允许这样做。

从此Visual C++ blog article about rvalue references

  

... C ++不希望你不小心修改临时数据....