C++ 无法将普通引用绑定到文本?

C++ 无法将普通引用绑定到文本?,c++,C++,例如: auto &h = 42; // error:we can't bind a plain reference to a literal. const auto &j = 42; // right 我不明白为什么编译器不能知道&h是'const int'& 我的意思是,“自动”有两个步骤:1.知道什么类型的右值。 2.确保左值成为类型 如果这一步是正确的,为什么我们必须在右值为文本时添加“const”?auto当输入为非常量时,决不会推导出const。由于

例如:

auto &h = 42;        // error:we can't bind a plain reference to a literal.
const auto &j = 42;  // right
我不明白为什么编译器不能知道
&h
是'const int'& 我的意思是,“自动”有两个步骤:1.知道什么类型的右值。 2.确保左值成为类型
如果这一步是正确的,为什么我们必须在右值为文本时添加“const”?

auto
当输入为非常量时,决不会推导出
const
。由于
42
具有类型
int
,因此
auto
推断为
int
,您的代码相当于:

int& h = 42;

这是一个错误,因为非常量左值引用无法绑定到prvalue。

可能的重复项您应该知道它不是
const int&
,编译器不会混淆。这是一个
int
纯右值。一个const引用绑定到它的事实并不意味着它是一个const引用类型。@ StytTeLeLee你应该知道很多声音,就像C++一样,它确实是一个专家友好的语言。D@skypjack-我们必须接受它的本来面目,并热爱它:PDo你有问题吗?