class x
{
public:
int y;
x& operator++(int);
};
我想要foo(),就像:
int& foo()
{
int& ret_val = x.y;
x++;
return ret_val;
}
但看起来像:
int& foo()
{
return (x++).y;
}
这可能吗?先前执行的是什么,返回还是++?
好的,谢谢你的回答。“而是在增量之前的状态中对象的副本(即 - 你的x& operator ++(int)不符合约定)” 我可以按照惯例编写operator ++(int)吗?怎么写呢?
然后我可以写这样的函数:
int foo() {return (x++).y;}
答案 0 :(得分:8)
++
在返回之前执行,但返回值在 ++
之前已经修复。我开始写出等效的代码但后来我意识到你的中间例子已经和你想做的一样了。
答案 1 :(得分:2)
++运算符将在之前执行。
答案 2 :(得分:0)
你的最终实现是错误的,不应该编译,因为你试图形成一个临时的非const引用。有许多悬空引用的情况,所有这些都是不正确的,但这个至少可以被编译器捕获。