gpt4 book ai didi

c++ - 为什么析取赋值运算符 |= 不适用于 bool vector ?

转载 作者:IT老高 更新时间:2023-10-28 22:37:24 25 4
gpt4 key购买 nike

如果我有 vector<bool> vec_bool那么我无法使用 |= 修改 vector 的内容赋值运算符。也就是线条

vec_bool[0] |= true;
vec_bool[0] |= vec_bool[1];

给出编译错误,而行

bool a = false;
a |= true;
a |= vec_bool[0];
vec_bool[0] = vec_bool[0] | vec_bool[1];
vec_bool[0] = vec_bool[0] || vec_bool[1];

vector<int> vec_int(3);
vec_int[0] |= vec_int[1];

不要。这是什么原因?

(由 gcc)给出的错误是:

test.cpp:21:17: error: no match for ‘operator|=’ (operand types are ‘std::vector::reference {aka std::_Bit_reference}’ and ‘bool’)

最佳答案

referenceoperator[] 返回的 std::vector<bool>不是 bool& 的别名,因为它是 std::vector 的主要特化.它由 C++ standard as this 指定。 :

// bit reference:
class reference {
friend class vector;
reference() noexcept;
public:
~reference();
operator bool() const noexcept;
reference& operator=(const bool x) noexcept;
reference& operator=(const reference& x) noexcept;
void flip() noexcept; // flips the bit
};

如您所见,没有 operator |=宣布。所以你不能将它应用到从 vec_bool[0] 返回的引用上。 .

vec_bool[0] = vec_bool[0] | vec_bool[1]; 的原因有效的是,上面有 个重载来促进它。 operator bool()转换内置 | 的两个操作数进入 bool值(value)观。然后是reference的赋值运算符将结果分配回 vec_bool[0] .

按照 C++ 标准的规定,std::vector<bool>不是一个特别好的抽象,IMO。

关于c++ - 为什么析取赋值运算符 |= 不适用于 bool vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46541677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com