【发布时间】:2020-12-08 03:22:15
【问题描述】:
我在读这本书,上面写着我们可以将一种类型的 const 引用分配给任何其他类型的对象,原因是,内部编译器将 Rvalue 分配给与引用相同类型的对象然后将 const 引用初始化为相同类型的对象,但是,如果这种类型的隐式转换有助于将 const 引用分配给不同类型的对象,那么为什么不可能隐式地进行相同的转换,因为对于这个显式转换。
#include<iostream>
using namespace std;
int main()
{
int a = 10;
double temp = (double)a;
double &x = temp;
cout << x << endl;
return 0;
}
也是一样的,为什么编译器里没有预配置?
【问题讨论】:
-
这个问题真的很难理解。你问的是什么行为?您的示例中的类型匹配,但您的措辞暗示它们不应该。你是说喜欢
double &x = a吗? -
我们可以将一种类型的 const 引用分配给任何其他类型的对象,原因是内部编译器将 Rvalue 分配给与引用相同类型的对象,然后const 引用被初始化为相同类型的对象 没有代码示例,这句话很难理解。
-
因为您不能将右值分配给非常量引用?在您的示例中,
temp是一个左值,因此不一样 -
听起来您认为
x是对a的引用。不是这种情况。它是对temp的引用,这是一个double,temp被初始化为a的值,即10。 -
如果你有一个代码序列(可以编译;这不能)
int a = 10; double &x = a; x = 7; cout << a;你希望打印什么值?
标签: c++ reference implicit-conversion explicit-conversion