代码之家  ›  专栏  ›  技术社区  ›  Rick Jim DeLaHunt

cin.rdstate()返回什么?

c++
  •  1
  • Rick Jim DeLaHunt  · 技术社区  · 7 年前

    我正在读一本书,上面写着:

    要关闭单个条件,我们使用 rdstate 成员和按位运算符以生成所需的新状态。
    例如,以下选项将关闭 failbit badbit 但是叶子 eofbit 未触及的:
    / / 关闭failbit和badbit,但所有其他位不变。
    cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);

    我对代码的作用感到非常困惑。

    以下是我试图找出的:

    1. 找出rdstate()返回的内容。
      http://en.cppreference.com/w/cpp/io/basic_ios/rdstate .
      它返回一个 iostate 对象。

    2. 找出原因 碘代的 对象是。
      http://en.cppreference.com/w/cpp/io/ios_base/iostate .
      这是一个 位掩码类型 我也看到了 实现定义 /".

    3. 找出原因 位掩码类型 是什么 碘代的 在我的编译器中实现。
      http://en.cppreference.com/w/cpp/concept/BitmaskType .
      typedef int iostate Visual C++。
      没有有用的信息。我被困在这里了。

    所以我还是不知道 rdstate() 返回值的样子以及代码行的工作方式。

    如何 cin.clear(cin.rdstate()&~cin.failbit&~cin.badbit); 工作?

    顺便问一下,我应该如何探索新的东西(C++),有什么建议吗?我是说,我查过文件,发现这没什么用。(例如,python和javascript文档更容易阅读和理解)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jodocus    7 年前

    如何 cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit); 工作?

    一个流有一个特定的状态,它可以同时具有多个状态,因为它们不是正交的(例如它可以是)。 EOF bad 同时)。不是定义n个不同的状态变量,一个只取一个并保留一定的 对于不同的,正交的状态。因此,如果要检查某个状态,必须检查特定的位(哪个位的含义是实现定义的,不太有用),或者使用提供的函数,如 good() , eof() 一模一样。可以总结出他们行为的表。 here .

    rdstate() 返回完整的状态变量。所以这行代码的意思是: “将流的状态设置为当前状态,但删除任何故障位和任何坏位。这就是数字中的二进制数字所发生的情况,如果你和它有你想删除的位的补码,也就是说,如果你想删除1101的第一位,你取1000的补码,也就是0111,因此1101&0111==0101。 类似地,如果要在变量中设置某个位,则使用按位或,例如。 0101 | 1000 == 1101 . 要了解更多关于按位操作的有用答案,请查看例如。 this one .

    顺便问一下,我应该如何探索新的东西(C++),有什么建议吗?我是说,我查过文件,发现这没什么用。(例如,python和javascript文档更容易阅读和理解)

    C++DOCS最有可能涉及到解释口罩的一般概念的细节,因为这是一种相当古老但又很常见的方法。现在,它应该被认为是C++中的遗物,因为它对初学者来说太混乱了,但由于向后兼容性,它仍然盛行。