用前导零初始化整数会产生意想不到的结果(c++)



问题总结

假设由于某种原因试图将整数31存储为int num = 0031;如果我输出num,我得到25。如果我使用cin,然而,存储的数字确实是31。您可以通过运行以下代码并在提示时键入0031来验证这一点。

#include <iostream>
using namespace std;
int main() {

cout << "Version 1n========="<< endl;
{
int num = 0031;
cout << "Input was: " << num << endl;
}cout << "=========" << endl;

cout << "Version 2n========="<< endl;
{
int num;
cout << "Insert num: ";
cin >> num;
cout << "Input was: " << num << endl;
}cout << "=========" << endl;
return 0;
}

在搜索答案时,我发现了这个带前导零的Int -意外结果

在c++中也是这样吗?也就是说,带前导零的整数存储为八进制整数?

为什么第二个块给出了预期的结果?是因为当使用cin流存储为字符串,然后隐式使用stoi()函数?

有关c++中的整数字面值,请参见此处:https://en.cppreference.com/w/cpp/language/integer_literal。是的,0031是一个八进制整数字面值。

要从代码的第二个版本获得预期的输出,您可以使用std::octio-manipulator:
int num;
cout << "Insert num: ";
cin >> std::oct >> num;
cout << "Input was: " <<  num << endl;

这是因为您使用八进制整型文字初始化num。值为25的十进制格式

最新更新