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)
它的工作方式相同,为什么它没有在编译器中预先配置?
如果编译器必须执行从一种类型到另一种类型的隐式转换,这意味着它必须创建一个临时文件来保存转换后的值。
非常量引用不能绑定到临时引用。时期。
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)