gpt4 book ai didi

c++ - 为什么下面是 `s.clear(ios::badbit);`?为什么不是 `s.clear(ios::failbit);` ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:32 35 4
gpt4 key购买 nike

我正在调查 this question而且我对给出的两个答案的理解没有问题。但我不确定我是否理解下面用注释 //set state 突出显示的语句中的 s.clear(ios::badbit);。例如,为什么不用 s.clear(ios::failbit); 代替?

#include <istream>
#include <complex>

using namespace std;

istream& operator>>(istream& s, complex<double>& a)
{
// input formats for a complex; "f" indicates a float:
//
// f
// (f)
// (f, f)

double re = 0, im = 0;
char c = 0;

s >> c;
if( c == '(' ) {
s >> re >> c;
if( c == ',' ) s >> im >> c;
if( c != ')' ) s.clear(ios::badbit); // set state
}
else {
s.putback(c);
s >> re;
}

if( s ) a = complex<double>(re, im);
return s;
}

最佳答案

您引用的这本书出版于 1991 年,比第一个 ISO C++ 标准发布早了 7 年。不清楚为什么作者选择使用 ios::badbit,因为在本书的第 2 版或第 3 版中都没有提供基本原理。

在 C++98 中,为 complex 添加了 operator>> 的非成员重载。这要求在错误输入的情况下设置 failbit 而不是 badbit

N1905 26.2/13

template < class T , class charT , class traits >
basic_istream < charT , traits >&
operator > >( basic_istream < charT , traits >& is , complex <T >& x );

Requires: The input values be convertible to T.

If bad input is encountered, calls is.setstate(ios::failbit) (which may throw ios::failure (27.4.4.3).

关于c++ - 为什么下面是 `s.clear(ios::badbit);`?为什么不是 `s.clear(ios::failbit);` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37380430/

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