使用 auto,我创建了一个变量号并使用 cin.get 来获取值。我使用此代码来执行此操作:
auto number = cin.get();
cout << typeid(number).name() << endl;
似乎即使我输入了一个超过 2147483647 的数字,该值仍然被分配为 int 类型。为什么是这样?如果数字超过最大 32 位 int 值,不应该自动分配 long 类型的值吗?
auto
在编译时解析,并根据返回类型cin.get()
(恰好是int
定义)决定。
此外,表达式typeid(number).name()
也在编译时进行评估,这意味着编译器将其解析为一个常量值(例如,"i"
对于我的系统)并将其存储在可执行文件中。
auto
在编译时解决。编译器推断它number
是类型int
,因为std::istream::get
返回一个int
.
如果这是一个问题,long long
请在此处明确使用。
所以auto
什么都改变不了。并且既不istream::get()
也不istream::getline()
实际地解析输入以查看它是否是数字。
但是让我们看一些选项:
cin.get()
这将返回一个表示输入流的一个字符的 int。但它代表一个字符,而不是一个数字。
cin.getline()
这是一个错误。
没有任何重载istream::getline()
不需要参数。
char s[100]; cin.getline(s, 100);
这将存储一行输入(如果太长,则存储 100 个字符)并将其存储在 string 中s
。
除了已经说过的auto
……
此处无法“输入超过 2147483647 的数字”。cin.get()
是无格式输入。您正在阅读bytes,而 bytes (假设CHAR_BIT==8
)只能达到255
. 这就是为什么cin.get()
返回一个int
: 它永远不会有更高的值。曾经。