std::experimental::simd_cast, std::experimental::static_simd_cast
来自 cppreference.cn
< cpp | experimental | simd
定义于头文件 <experimental/simd> |
||
template< class V, class T, class Abi > /*见下文*/ simd_cast( const simd<T, Abi>& v ) noexcept; |
(1) | (parallelism TS v2) |
template< class V, class T, class Abi > /*见下文*/ static_simd_cast( const simd<T, Abi>& v ) noexcept; |
(2) | (parallelism TS v2) |
将 simd 对象转换为另一个 simd 对象。如果 V 是 T,则返回 simd<T, Abi>; 否则,如果 V 是标量类型,则返回 simd<V, simd_abi::fixed_size<simd<T, Abi>::size()>>。否则,V 必须是 simd 类型,并且函数返回 V。
1) 除非满足以下条件,否则此函数不参与重载决议:
- 输入元素的每个可能值都可以用输出元素表示,
- 或者 is_simd_v<V> 为 false,或者 V::size() 等于 simd<T, Abi>::size()。
2) 除非 is_simd_v<V> 为 false,或者 V::size() 等于 simd<T, Abi>::size(),否则此函数不参与重载决议。
内容 |
[编辑] 参数
v | - | 输入的 simd 对象 |
[编辑] 返回值
一个 simd 对象,其第 i 个元素初始化为 static_cast<To>(v[i]),其中 To 是指定的输出元素类型。
[编辑] 注解
TS 规范缺少 simd_cast 和 static_simd_cast 对 simd_mask 的重载。 libstdc++ 实现提供了 std::experimental::__proposed 命名空间中缺少的重载。 如果您已经使用了
namespace stdx = std::experimental;
快捷方式,您可能对使用
namespace stdx { using namespace std::experimental; using namespace std::experimental::__proposed; }
代替方案感兴趣。 或者,libstdc++ 在 simd_mask 中实现了一个 __cvt() 成员函数,它允许掩码的隐式转换。 另请参阅:https://github.com/VcDevel/std-simd/issues/41
[编辑] 示例
本节不完整 原因:没有示例 |