hellomyprogram 发表于 2023-11-19 15:02:51

C++ bitset 不能转化成 bool

我在执行以下代码的时候出了一点问题:
#include <bitset>
#include <iostream>
int main()
{
        std::bitset<4> test = 0b0101;
        std::bitset<4> mask = 0b0001;
        if (test & mask)
        {
                std::cout << "OK";
        };
};
然后编译器就报错说 test & mask 不能转换成 bool 类型,不给编译。必须要改成这样:
#include <bitset>
#include <iostream>
int main()
{
        std::bitset<4> test = 0b0101;
        std::bitset<4> mask = 0b0001;
        if (test & mask == mask)
        {
                std::cout << "OK";
        };
};
但这样好麻烦,我希望能够按照最前面的方法就能成功输出,怎么做才行?

isdkz 发表于 2023-11-19 15:03:00

您遇到的问题是因为 C++ 中的std::bitset不支持直接转换成bool类型。解决这个问题的方法是使用any或all成员函数来判断bitset对象中是否有任意位或所有位被设置为 1。

以下是修改后的代码示例:

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<4> test = 0b0101;
    std::bitset<4> mask = 0b0001;

    if ((test & mask).any()) // 使用 any 成员函数判断是否有任意位被设置为 1
    {
      std::cout << "OK";
    }
}


在这个示例中,我们使用了any成员函数来判断test和mask进行按位与操作后是否有任意位被设置为 1。这样就能够按照最前面的方法成功输出 "OK",而不需要将表达式转换成bool类型。

Mike_python小 发表于 2023-11-19 15:03:21

在C++中,std::bitset类型的对象执行按位与操作后,返回的是仍然是一个std::bitset对象,而不是bool类型。因此,在条件判断语句中需要将其转换为bool类型才能进行判断。

如果你希望按照最初的方法成功输出,你可以通过将结果显式地转换为bool类型来实现。这可以通过使用std::bitset对象的to_ulong或any方法来实现。

以下是两种方法的示例代码:


#include <bitset>
#include <iostream>

int main() {
    std::bitset<4> test = 0b0101;
    std::bitset<4> mask = 0b0001;

    // 方法一:使用to_ulong()方法
    if ((test & mask).to_ulong()) {
      std::cout << "OK";
    }

    // 方法二:使用any()方法
    if ((test & mask).any()) {
      std::cout << "OK";
    }
}


通过以上方法,你可以将std::bitset对象的结果转换为bool类型,从而使得条件判断语句能够正确工作,而不必再改变条件判断语句的结构。

希望以上解决方案对你有所帮助。如果还有其他问题,请随时向我提问。
页: [1]
查看完整版本: C++ bitset 不能转化成 bool