为什么可以初始化const引用而不是rvalue的非const引用?

时间:2017-03-17 23:17:07

标签: c++

在C ++中,您无法初始化rvalue中的引用,因为rvalue会立即被销毁。如何从rvalues初始化const引用?

例如:

int f() {
    return 3;
}

int main() {
    const int& x = f(); // ok
    int& y = f();       // error: invalid initialization of non-const reference of 
                        // type ‘int&’ from an rvalue of type ‘int’
}

1 个答案:

答案 0 :(得分:-2)

如果我理解你的问题,我猜你想知道代码“const int& x = f();”可行,因为f()的返回值将被销毁,并且对该对象的引用无效。但请注意,任何函数的返回值都在堆栈中由编译器创建的临时变量中,因此它一直保持到调用函数返回并且其堆栈被销毁为止。