constexpr basic_mask() noexcept = default; // (1) C++26
constexpr explicit basic_mask(same_as<value_type> auto x) noexcept; // (2) C++26
template<std::size_t UBytes, class UAbi>
constexpr explicit basic_mask(const basic_mask<UBytes, UAbi>& x) noexcept; // (3) C++26
template<class G>
constexpr explicit basic_mask(G&& gen); // (4) C++26
template<same_as<bitset<size()>> T>
constexpr basic_mask(const T& b) noexcept; // (5) C++26
template<unsigned_integral T>
requires (!same_as<T, value_type>)
constexpr explicit basic_mask(T val) noexcept; // (6) C++26
概要
basic_maskオブジェクトを構築する。
- (1) : デフォルトコンストラクタ。各要素は値初期化される
- (2) : ブロードキャストコンストラクタ。すべての要素を単一の値
xで初期化する - (3) : 変換コンストラクタ。要素数が等しい別の
basic_maskから各要素を変換して初期化する - (4) : ジェネレータコンストラクタ。各要素の値を、添字を引数とする関数オブジェクト
genの呼び出し結果で初期化する - (5) :
std::bitsetの各ビットで対応する要素を初期化する - (6) : 符号なし整数値
valの各ビットで対応する要素を初期化する
テンプレートパラメータ制約
- (3) :
basic_mask<UBytes, UAbi>::size() == size()がtrueであること - (4) : すべての
i(0 <= i < size())について、式gen(std::integral_constant<simd-size-type, i>())が適格であり、その型がboolであること - (6) :
Tがvalue_type(bool)と異なる符号なし整数型であること
効果
- (1) : 各要素を値初期化する
- (2) : 各要素を
xで初期化する - (3) : すべての
i(0 <= i < size())について、i番目の要素をx[i]で初期化する - (4) : すべての
i(0 <= i < size())について、i番目の要素をgen(std::integral_constant<simd-size-type, i>())で初期化する - (5) : すべての
i(0 <= i < size())について、i番目の要素をb[i]で初期化する - (6) : 先頭の
M個の要素をvalの対応するビット値で初期化する。ここでMはsize()と、valの型の値表現のビット数のうち小さいほうである。Mがsize()より小さい場合、残りの要素はfalseで初期化される
例外
- (4) :
genの呼び出しが例外を送出する場合を除いて、投げない
備考
- (4) :
genは各iにつき正確に1回、iの昇順で呼び出される
例
#include <simd>
#include <bitset>
#include <print>
namespace simd = std::simd;
int main()
{
// (2) ブロードキャスト:すべての要素をtrueにする
simd::mask<int, 4> allTrue{true};
// (4) ジェネレータ:偶数番目の要素をtrueにする
simd::mask<int, 4> gen = [](int i) { return i % 2 == 0; };
// (5) bitsetから構築する(0番目のビットが先頭要素)
simd::mask<int, 4> fromBitset{std::bitset<4>{"1010"}};
// (6) 符号なし整数のビット列から構築する
simd::mask<int, 4> fromBits{0b1010u};
for (int i = 0; i < allTrue.size(); ++i)
std::print("{} ", allTrue[i]);
std::println("");
for (int i = 0; i < gen.size(); ++i)
std::print("{} ", gen[i]);
std::println("");
for (int i = 0; i < fromBits.size(); ++i)
std::print("{} ", fromBits[i]);
std::println("");
}
出力
true true true true
true false true false
false true false true
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌