std::experimental::simd_mask<T,Abi>::simd_mask
来自cppreference.com
< cpp | experimental | simd | simd mask
simd_mask() noexcept = default; |
(1) | (并行 TS v2) |
explicit simd_mask( bool value ) noexcept; |
(2) | (并行 TS v2) |
template< class U > simd_mask( const simd_mask<U, simd_abi::fixed_size<size()>>& other ) noexcept; |
(3) | (并行 TS v2) |
template< class U, class Flags > simd_mask( const bool* mem, Flags flags ); |
(4) | (并行 TS v2) |
simd_mask( const simd_mask& other ) noexcept = default; |
(5) | (并行 TS v2) (隐式声明) |
simd_mask( simd_mask&& other ) noexcept = default; |
(6) | (并行 TS v2) (隐式声明) |
2) 广播构造函数构造一个
simd_mask
,其所有值均初始化为 value。3) 构造一个
simd_mask
,使得对于范围 [
0,
size()
)
中的所有 i,第 i 个元素以 other[i] 初始化。此重载只有在Abi
为 simd_abi::fixed_size<size()>时才会参与重载决议.5,6) 隐式声明的复制和移动构造函数。构造一个
simd_mask
,其各个元素以 other 中各元素的值初始化。参数
value | - | 用于初始化 simd_mask 的所有元素的值
|
other | - | 要复制的另一 simd_mask
|
mem | - | 指向数组的指针,其中 [ mem, mem + size()) 为有效范围
|
flags | - | 如果对于类型 vector_aligned_tag,则加载构造函数可能假设 mem 指向按 memory_alignment_v<simd_mask> 对齐的存储
|
类型要求 | ||
-is_simd_flag_type_v<Flags> 必须为 true。
|
示例
运行此代码
#include <algorithm> #include <cstddef> #include <experimental/simd> #include <iostream> namespace stdx = std::experimental; int main() { [[maybe_unused]] stdx::native_simd_mask<int> a; // 未初始化 stdx::native_simd_mask<int> b(true); // 所有元素初始化为 true stdx::native_simd_mask<int> c{}; // 所有元素初始化为 false alignas(stdx::memory_alignment_v<stdx::native_simd_mask<int>>) std::array<bool, stdx::native_simd_mask<int>::size() * 2> mem = {}; std::ranges::generate(mem, [i{0}] mutable -> bool { return i++ & 1; }); stdx::native_simd_mask<int> d(&mem[0], stdx::vector_aligned); // {0, 1, 0, 1, ...} stdx::native_simd_mask<int> e(&mem[1], stdx::element_aligned); // {1, 0, 1, 0, ...} const auto xored = b ^ c ^ d ^ e; for (std::size_t i{}; i != xored.size(); ++i) std::cout << xored[i] << ' '; std::cout << '\n'; }
可能的输出:
0 0 0 0 0 0 0 0
参阅
(并行 TS v2) |
指示元素对齐的标签类型 (类) |
(并行 TS v2) |
指示向量类型对齐的标签类型 (类) |
(并行 TS v2) |
指示实参的加载/存储地址按照指定的对齐进行对齐 (类模板) |
(并行 TS v2) |
获得 vector_aligned 的适当对齐 (类模板) |
(并行 TS v2) |
从连续内存加载 simd_mask 元素 (公开成员函数) |