cin.claer(cin.rdstate() & ~cin.failbit & ~cin.badbit);
为什么这条语句完成了复位failbit和badbit而保持其他标志位不变的功能?
因为:
cin.rdstate() & ~cin.failbit & ~cin.badbit:这是一个位与操作,用于将 cin.rdstate() 的返回值与取反后的 failbit 和 badbit 进行与操作。这将导致除了 failbit 和 badbit 之外的其他标志位保持原样,而这两个标志位将被复位(即置为 0)。
cin.clear():clear() 是 cin 流对象的成员函数,用于设置流对象的状态。当 clear() 被调用时,它会接受一个整数参数,并将该整数的值设置为流对象的状态。
在这个语句中,我们将位与操作的结果作为参数传递给 clear() 函数,这将导致 cin 流对象的状态被设置为除了 failbit 和 badbit 之外的原来的状态,并将这两个标志位复位为 0。
因此,这条语句完成了复位 cin 流对象的 failbit 和 badbit 标志位,同时保持其他标志位不变。