为 Bitset 赋值

Assign a value to Bitset

我很想知道为什么下面的代码可以工作! 根据 bitset 模板 class,您可以通过构造函数为 bitset(int 或二进制表示形式的字符串)赋值,但之后不能。 但是在这里你可以看到整数的显式赋值工作正常。

#include <iostream>
#include <bitset>
#include <string>
using namespace std;

int main()
{
    bitset<8> b(string("101"));
    cout << b.to_ullong()<<"\n";
    b= 145;
    cout << b<<"\n";
    return 0;
}

这个问题也可能是相关的。 How to assign bitset value from a string after initializaion

Bitset 的 non-string constructors are implicit.

如果它们被声明为明确的,你确实必须写

b = bitset<8>(145);

令人困惑的是 std::bitset 并未明确定义 operator=。但是,编译器会生成一个(请参阅 this question). You can actually check that using cppinsight。这意味着,结合接受的答案中提到的隐式构造函数,您的代码可以正常工作。您可以在 cppinsight 示例中看到构造函数调用和后续赋值。