我希望auto关键字从初始化器中推断出变量的类型一次,并在整个代码中保持该类型。令我惊讶的是,我的编译器 ( g++ 9.3.0) 允许我更改它的类型并且它仍然有效。当我第一次使用变量作为 int 然后作为 float 时,这对我来说是可以接受的。但是,当我使用auto关键字声明一个字符串,然后为该变量分配一个浮点值时,编译器不会抛出错误,但也不会在浮点赋值后打印该值。有人可以解释为什么它允许首先将浮点值分配给字符串变量吗?编译器每次都只接受新的赋值吗?或者它是否抛出某种我无法捕获的异常?下面的代码 -
#include <iostream>
int main()
{
auto x = '2';
std::cout << x << std::endl;
x = 3.0; // Why is this allowed?
std::cout << x << std::endl; // This won't print
return 0;
}
Run Code Online (Sandbox Code Playgroud)