【发布时间】:2018-05-07 22:28:48
【问题描述】:
假设你有以下代码:
long& fn2(long& another_var1, long another_var2){
another_var1 = another_var1 + another_var2;
another_var2 = another_var2 + another_var1;
return another_var1;
}
int main (){
cout << boolalpha;
long var1 = 5;
long var2 = 10;
auto result = fn2(var1, var2);
cout << &result << endl;
cout << &var1 << endl;
cout << result << endl; //Line 1
cout << (&result == &var1) << endl; //Line 2
}
在您到达 Line 2 之前,一切都按预期进行,其中返回了 false。当你autoresult 时,它应该是another_var1 的引用变量,这是对var1 的引用,即它们都应该具有相同的地址——它们只是相同内存的名称别名。查看Line 1,返回15,给人一种它们都一样的错觉。然后,Line 2 反驳了这一点。
不过,我认为这可能是auto 的问题。如果删除auto 并将其替换为真正的返回类型long&,则会得到预期的结果。
谁能解释一下到底发生了什么?
【问题讨论】:
-
auto如果我没记错的话默认为非引用。 -
auto result是一个值,auto& result可以解决问题。 -
@user4581301 确实这就是原因。太傻了。
-
@user4581301 相反会是出乎意料和危险的。
-
@user4581301 如果您觉得这不直观,那么我建议您更新您对参考文献的直觉
标签: c++ pointers reference memory-address