C++中的参考函数

joh*_*ith 5 c++ reference function

我有一个函数,当我尝试编译时,它给出了错误"无法从'int'转换为'int&'".

int& preinc(int& x) { 
    return x++;
}
Run Code Online (Sandbox Code Playgroud)

如果我用x替换x ++,它将编译,但我不确定它是如何使它有任何不同.我认为x ++在x递增x之前返回x,所以不应该"返回x ++"与preinc返回的"return x"相同吗?如果问题在于++运算符作用于x,那么如果我在return语句之前或之后放置行"x ++",或者用++ x替换x ++,为什么它不会产生任何错误?

Sve*_*ven 11

x++ 创建原始的临时副本,增加原始副本,然后返回临时副本.

因为您的函数返回引用,所以您尝试返回对临时副本的引用,该临时副本是函数的本地副本,因此无效.


Lig*_*ica 11

你的功能做了两件事:

  • x通过引用递增您传入的内容
  • 返回对表达式的本地结果的引用x++

对本地的引用是无效的,并且从该函数返回任何内容似乎完全是多余的.

以下是固定的,但我仍然认为有更好的方法:

int preinc(int& x) {
   return x++; // return by value
}
Run Code Online (Sandbox Code Playgroud)