如果我使用 >> 运算符从 istream 中读取一个整数,并且表示的整数大于 INT_MAX,则该操作只返回 INT_MAX。
我目前正在与 INT_MAX 进行比较以检测溢出,但是如果输入操作“2147483647”,那么它将返回错误,而实际上没有错误并且结果有效。
示例:http: //ideone.com/4bXyGd
#include <iostream>
#include <sstream>
#include <climits>
int main() {
std::istringstream st("1234567890123"); // Try with 2147483647
int result;
st >> result;
if (result == INT_MAX)
std::cout << "Overflow!" << std::endl;
else
std::cout << result << std::endl;
return 0;
}
这样做的意识形态正确方法是什么?