我正在阅读std::bitset::reference
的{{3}},我不确定为什么,定义了两个赋值运算符:
reference& operator=( bool x );
reference& operator=( const reference& x );
这两个声明是出于优化原因,还是因为编译器生成的复制函数没有预期的结果?
答案 0 :(得分:4)
典型的代理引用类存储指向bitset
的指针(或引用)以及引用的位的索引(或等效于这些的索引)。成员复制分配,如果编译,很可能只是重新安装“参考”。
但是您希望b[0] = b[1]
将第二位的值分配给第一位,而不是重置b[0]
返回的代理引用以引用第二位。因此需要第二次过载。