为什么auto y = reference_to_x的地址与x的地址不一样?

Art*_*Art 4 c++ pointers reference memory-address

假设您有以下代码:

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 
}
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,直到你到达Line 2,false返回的地方.当你auto result,它应该是一个引用变量another_var1,它是一个引用var1,即它们都应该具有相同的地址 - 它们只是同一内存的名称别名.看着Line 1,15被归还,给人一种错觉,他们都是一样的.然后,Line 2反驳说.

不过,我认为这可能是一个问题auto.如果删除auto并用其真实的返回类型替换它long&,则会得到预期的结果.

任何人都可以解释真正发生的事情吗?

eer*_*ika 5

当你auto result,它应该是一个参考变量another_var1

这是你的错误.如果result应该是引用,那么您必须声明引用.像这样:

auto& result = fn2(var1, var2);
Run Code Online (Sandbox Code Playgroud)