问题总结
假设由于某种原因试图将整数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::oct
io-manipulator:
int num;
cout << "Insert num: ";
cin >> std::oct >> num;
cout << "Input was: " << num << endl;
这是因为您使用八进制整型文字初始化num
。值为25的十进制格式