如何初始化C++ experimental/simd向量?是否支持列表初始化?
C++ experimental::simd 的其他初始化方式及列表初始化支持情况
除了你提到的两种初始化方式,experimental::simd还支持以下几种常见的初始化方式:
从数组/指针初始化:可以直接用长度匹配的普通数组或指针构造SIMD向量,比如:
int data[] = {3, 1, 4, 1}; fixed_size_simd<int, 4> a(data);只要数组的元素数量和
fixed_size_simd指定的大小一致即可。复制/移动初始化:和普通类型一样,可以通过已有的SIMD向量进行复制或移动构造:
fixed_size_simd<int, 4> b = a; // 复制初始化 fixed_size_simd<int, 4> c(std::move(a)); // 移动初始化类型转换初始化:使用
simd_cast可以在兼容的SIMD类型之间转换初始化,比如将整数SIMD向量转换为浮点类型:fixed_size_simd<int, 4> int_vec{1,2,3,4}; fixed_size_simd<float, 4> float_vec = simd_cast<fixed_size_simd<float,4>>(int_vec);
至于你问的列表初始化形式const fixed_size_simd<int, 4> a{3, 1, 4, 1};,答案是完全支持。fixed_size_simd属于聚合类型,符合C++聚合初始化的规则,只要初始化列表中的元素数量和向量的固定大小严格匹配就可以正常编译使用。
需要注意的是,不同编译器对experimental::simd的实现可能存在细节差异,编译时需要启用对应的实验性库支持(比如GCC需要添加-fexperimental-library编译选项)。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

