为什么不会自动分配长整型的值?



使用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 个字符)并将其存储在字符串s中。

除了已经说过的关于auto

...

在这里不可能"输入超过 2147483647 的数字"。 cin.get()无格式的输入。您正在读取字节,而字节(假设CHAR_BIT==8)最多只能达到255。这就是为什么cin.get()返回一个int:它永远不会有任何更高的值。曾。

相关内容

  • 没有找到相关文章

最新更新