之前执行的内容,返回或 ++

What executes earlier, return or ++?

本文关键字:返回 执行      更新时间:2023-10-16
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& 运算符++(int) 不遵循约定)"我可以按照约定编写运算符++(int)吗?怎么写?

那我可以写这样的函数吗:

int foo() {return (x++).y;}

++在返回之前执行,但返回++之前是固定的。 我开始写出等效的代码,但后来我意识到你的中间示例已经和你想做的一样了。

++ 运算符将在前面执行。

你的最终实现是错误的,不应该编译,因为你试图形成一个对临时的非常量引用。 有很多悬空引用的情况,所有这些都是不正确的,但至少编译器可以捕获这一情况。