为什么非 const 引用不能初始化为不同类型的对象?

duk*_*ver 0 c++ reference implicit-conversion explicit-conversion

我正在阅读这本书,它写道我们可以将一种类型的常量引用分配给任何其他类型的对象,原因是,内部编译器将Rvalue分配给与引用相同类型的对象,然后const引用被初始化为相同类型的对象,但是,如果这种类型的隐式转换有助于将常量引用分配给不同类型的对象,那么为什么不能隐式地进行相同的转换,因为对于这种显式转换。

#include<iostream>
using namespace std;
int main()
{
    int a = 10;

    double temp = (double)a;
    double &x = temp;
    cout << x << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的工作方式相同,为什么它没有在编译器中预先配置?

Rem*_*eau 6

如果编译器必须执行从一种类型到另一种类型的隐式转换,这意味着它必须创建一个临时文件来保存转换后的值。

非常量引用不能绑定到临时引用。时期。

const 引用可以,并且会延长临时对象的生命周期。

换句话说:

#include <iostream>
using namespace std;

int main()
{
    int a = 10;

    double &x = (double)a; // ERROR! Can't bind to the temporary double
    cout << x << endl;

    const double &x2 = (double)a; // OK! Binds to the temporary double
    cout << x2 << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现场演示