gpt4 book ai didi

c++ - 失败时 C++ 中的 istream 行为变化

转载 作者:IT老高 更新时间:2023-10-28 12:58:21 26 4
gpt4 key购买 nike

取自:cppreference

直到 C++11:

If extraction fails (e.g. if a letter was entered where a digit is expected), value is left unmodified and failbit is set.

C++11 起:

If extraction fails, zero is written to value and failbit is set. If extraction results in the value too large or too small to fit in value, std::numeric_limits<T>::max() or std::numeric_limits<T>::min() is written and failbit flag is set.

由于此更改,这意味着以下代码段:

int x = 1;
std::cin >> x;
return x;

如果数值转换失败,将返回1在 C++11 之前和 0否则。

为什么标准委员会会引入如此微妙的突破性变化?或者更确切地说,在 C++11 之前,什么样的代码可能需要进行这种更改?

最佳答案

似乎与最初指定的一样,operator>> s 在某些情况下被破坏(即严格来说不存在)。这就是“修复”。

在 2011 年初的草案中,该标准在这方面与 2003 年基本相同。但是,在 Matt Austern(1998 年!)打开的库缺陷报告中,num_get<>::get()不存在 shortint .所以他们改为使用 long版本,并检查读取的数量是否在正确的范围内。

缺陷报告是 here .

(并没有真正解释为什么他们认为自己不能保持最初预期的行为,但这就是标准的这一部分被更改的原因。)

关于c++ - 失败时 C++ 中的 istream 行为变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com