3

我最近问了这个问题是 return x++ 的行为;定义?

结果与我的预期差不多,但让我想到了类似的情况。

如果我要写

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

bar 现在在哪里返回一个 int 引用,是否定义了这种行为?如果上一个问题的答案是真的,而不仅仅是对正在发生的事情的方便抽象,那么您似乎会返回对堆栈变量的引用,该堆栈变量将在执行返回时立即销毁。

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

4

2 回答 2

5

不,您不能这样做,因为这将返回对临时对象的引用。

于 2010-03-06T02:00:10.440 回答
0

您的代码将导致compilation error. 但是,如果您将后增量更改为前增量,它就会起作用。的值x递增,然后x返回对此修改的引用。

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

来自这篇关于右值引用的 Visual C++ 博客文章

... C++ 不希望您意外修改临时对象...。

于 2010-03-06T02:14:19.483 回答