我最近问了问题Is the behavior of return x++; defined?
结果是关于我的预期,但让我想到了类似的情况。
如果我要写
class Foo
{
...
int x;
int& bar() { return x++; }
};
bar现在返回一个int引用,是否定义了此行为?如果上一个问题的答案字面上是真的,而不仅仅是对正在发生的事情的方便抽象,那么看起来你会返回一个堆栈变量的引用,它会在执行返回后立即被销毁。
如果它只是一个抽象,我有兴趣知道后增量实际保证了什么行为。
答案 0 :(得分:5)
不,你不能这样做,因为那会返回对临时的引用。
答案 1 :(得分:0)
您的代码将生成compilation error
。但是,如果将后增量更改为预增量,则可以正常工作。 x
的值递增,然后返回对此修改后的x
的引用。
当前代码的问题在于您正在尝试修改临时代码,因为它们是临时对象,所以不允许这样做。
从此Visual C++ blog article about rvalue references
... C ++不希望你不小心修改临时数据....