std::experimental::simd<T,Abi>::operator!,~,+,-

< cpp‎ | experimental‎ | simd‎ | simd
mask_type operator!() const noexcept;
(1) (并行 TS v2)
simd operator~() const noexcept;
(2) (并行 TS v2)
simd operator+() const noexcept;
(3) (并行 TS v2)
simd operator-() const noexcept;
(4) (并行 TS v2)

simd 的每个元素运用给定的一元运算符。

1) 返回一个 simd_mask<T, Abi>,使得对于范围 [0size()) 中的所有 i,第 i 个元素等于 !operator[](i)
2) 返回一个 simd,其每个位均为 *this 中的对应位的反转。此重载只有在T 为整数类型时才会参与重载决议。
3) 返回其自身的副本。
4) 返回一个 simd,使得对于范围 [0size()) 中的所有 i,第 i 个元素被初始化为 -operator[](i)

示例

#include <cstddef>
#include <experimental/simd>
#include <iostream>
#include <string_view>
namespace stdx = std::experimental;
 
void println(std::string_view op, const stdx::native_simd_mask<int> x)
{
    std::cout << op << ": ";
    for (std::size_t i = 0; i < x.size(); ++i)
        std::cout << std::boolalpha << x[i] << ' ';
    std::cout << '\n';
}
 
void println(std::string_view op, const stdx::native_simd<int> x)
{
    std::cout << op << ": ";
    for (std::size_t i = 0; i < x.size(); ++i)
        std::cout << x[i] << ' ';
    std::cout << '\n';
}
 
int main()
{
    const stdx::native_simd<int> a([](int i) { return i; });
 
    println("  a", a);
    println(" !a", !a);
    println(" ~a", ~a);
    println("~~a", ~~a);
    println(" +a", +a);
    println(" -a", -a);
    println("+-a", +-a);
}

可能的输出:

  a: 0 1 2 3 
 !a: true false false false 
 ~a: -1 -2 -3 -4 
~~a: 0 1 2 3 
 +a: 0 1 2 3 
 -a: 0 -1 -2 -3 
+-a: 0 -1 -2 -3