Mee*_*ies 14 c++ assignment-operator
如果我有一个,vector<bool> vec_bool那么我无法使用|=赋值运算符修改向量的内容.就是这条线
vec_bool[0] |= true;
vec_bool[0] |= vec_bool[1];
Run Code Online (Sandbox Code Playgroud)
给出编译错误,而行
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];
Run Code Online (Sandbox Code Playgroud)
不要.这是什么原因?
给出的错误(通过gcc)是:
TEST.CPP:21:17:错误:不对应的 '运营商| ='(操作数的类型是 '的std ::矢量::参考{又名的std :: _ Bit_reference}' 和 '布尔')
Sto*_*ica 18
在reference从返回operator[]的std::vector<bool>是不是一个别名bool&,因为它是为初级专业化std::vector.它由C++标准指定为:
// 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
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,没有operator |=宣布.所以你不能将它应用于从中返回的引用vec_bool[0].
其原因vec_bool[0] = vec_bool[0] | vec_bool[1];的工作原理是,有是高于重载方便吧.operator bool()将内置的两个操作数转换|为bool值.然后赋值运算符reference将结果赋值给vec_bool[0].
正如C++标准所规定的那样std::vector<bool>,IMO并不是一个特别好的抽象.
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |