valarray<T>& operator|=(const ValOrProxy<T>& xs); // (1)
valarray<T>& operator|=(const T& x); // (2)
概要
論理和の複合代入を行う。
- (1) :
*this
の各要素に、xs
の各要素との論理和を代入する。 - (2) :
*this
の各要素に、x
との論理和を代入する。
効果
- (1) : 以下のコードと等価のことを行う:
for (std::size_t i = 0; i < size(); ++i) {
(*this)[i] |= xs[i];
}
- (2) : 以下のコードと等価のことを行う:
for (std::size_t i = 0; i < size(); ++i) {
(*this)[i] |= x;
}
戻り値
*this
備考
- 引数の型
ValOrProxy
は、valarray
、あるいは、その代理となる型である。
<valarray>
の概要も参照のこと。 - (1) :
*this
とxs
の要素数が異なる場合、その挙動は未定義。
例
#include <cassert>
#include <valarray>
#include <cstdint>
#include <algorithm>
template <class T>
bool equal_valarray(const std::valarray<T>& a, const std::valarray<T>& b)
{
const std::valarray<bool> result = a == b;
return std::all_of(std::begin(result), std::end(result), [](bool b) { return b; });
}
int main()
{
const std::valarray<std::uint8_t> a = {
0b00000101,
0b00001010,
0b00010101
};
const std::valarray<std::uint8_t> b = {
0b00000011,
0b00000011,
0b00000011
};
const std::valarray<std::uint8_t> expected = {
0b00000111,
0b00001011,
0b00010111
};
std::valarray<std::uint8_t> result1 = a;
result1 |= b;
assert((equal_valarray(result1, expected)));
std::valarray<std::uint8_t> result2 = a;
result2 |= 0b00000011;
assert((equal_valarray(result2, expected)));
}
出力