0

使用 auto,我创建了一个变量号并使用 cin.get 来获取值。我使用此代码来执行此操作:

auto number = cin.get();
cout << typeid(number).name() << endl; 

似乎即使我输入了一个超过 2147483647 的数字,该值仍然被分配为 int 类型。为什么是这样?如果数字超过最大 32 位 int 值,不应该自动分配 long 类型的值吗?

4

4 回答 4

3

auto在编译时解析,并根据返回类型cin.get()(恰好是int 定义)决定。

此外,表达式typeid(number).name()也在编译时进行评估,这意味着编译器将其解析为一个常量值(例如,"i"对于我的系统)并将其存储在可执行文件中。

于 2015-01-11T01:20:58.520 回答
2

auto在编译时解决。编译器推断它number是类型int,因为std::istream::get返回一个int.

如果这是一个问题,long long请在此处明确使用。

于 2015-01-11T01:16:52.297 回答
1

所以auto什么都改变不了。并且既不istream::get()也不istream::getline()实际地解析输入以查看它是否是数字。

但是让我们看一些选项:

cin.get()

这将返回一个表示输入流的一个字符的 int。但它代表一个字符,而不是一个数字。

cin.getline()

这是一个错误。
没有任何重载istream::getline()不需要参数。

char s[100]; cin.getline(s, 100);

这将存储一行输入(如果太长,则存储 100 个字符)并将其存储在 string 中s

于 2015-01-11T01:27:51.693 回答
0

除了已经说过的auto……

此处无法“输入超过 2147483647 的数字”。cin.get()无格式输入。您正在阅读bytes,而 bytes (假设CHAR_BIT==8)只能达到255. 这就是为什么cin.get()返回一个int: 它永远不会有更高的值。曾经。

于 2015-01-11T02:01:31.167 回答