我正在读一本书,上面写着:
我对代码的作用感到完全困惑。
这是我尝试找出的方法:
http://en.cppreference.com/w/cpp/io/basic_ios/rdstate。
它返回一个
iostate
对象。 iostate
对象。http://en.cppreference.com/w/cpp/io/ios_base/iostate。
这是一个位掩码类型,我也看到它是“/实现定义/”。
iostate
如何在我的编译器中实现。http://en.cppreference.com/w/cpp/concept/BitmaskType。
typedef int iostate
,可视C++没有有用的信息。我被困在这里。
所以我仍然不知道
rdstate()
返回的值是什么样的,以及那行代码如何工作。cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);
如何工作?顺便说一句,我应该如何探索新的东西(在C++中),有什么建议?我的意思是,我检查了文档,发现并没有太大帮助。 (例如,Python和JavaScript文档更易于阅读和理解)
最佳答案
一个流具有某种状态,好吧,它可以一次具有多个状态,因为它们不是全部正交的(例如,它可以同时是EOF
和bad
)。不用定义N个不同的状态变量,而是只取一个,并为不同的正交状态保留该变量的某些位。因此,如果要检查某个状态,则必须检查某些位(该位的含义是实现定义的,并且对了解不是很有用),或者使用提供的函数(如good()
,eof()
等) 。可以找到总结其行为的表格,例如。 here。rdstate()
完全返回完整的状态变量。因此,这行代码的意思是:
“将流的状态设置为当前状态,但删除任何故障位和任何故障位。这就是如果您将二进制位与要删除的位的补码进行AND运算(即,如果要删除1101的第一位,则取1000的补码,即0111,因此1101&0111 == 0101。
同样,如果您想在变量中设置某个位,则可以使用按位或,例如0101 | 1000 == 1101
。
有关探索按位运算的更多信息的有用答案,请参见例如this one。
C++文档很可能会详细解释位掩码的一般概念,因为这是C语言中的一种较旧但常见的方法。如今,它应被视为C++的遗物,因为它对于初学者来说太困惑了,但是它由于向后兼容,仍然流行。
关于c++ - cin.rdstate()返回什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50790501/