为啥 std::valarray 不是算术的?

Posted

技术标签:

【中文标题】为啥 std::valarray 不是算术的?【英文标题】:Why is std::valarray non-arithmetic?为什么 std::valarray 不是算术的? 【发布时间】:2020-07-12 10:16:47 【问题描述】:

我注意到std::is_arithmetic<std::valarray<float>> 的计算结果为false。 valarrays 的全部意义不是促进重载标量代码以“自动矢量化”而不求助于 boost 等吗?

为什么它不继承其模板类型的算术属性?

我的问题不一定是问题,而是我的基本误解,因为如果这确实是有意的,我一定会错过一些哲学洞察力。

【问题讨论】:

您正在检查 std::valarray<float> 是否是算术运算(即 容器 本身)。您可能想要检查底层类型:std::valarray<float>::value_type(即std::valarray<float>[0])。 【参考方案1】:

std::is_arithmetic 告诉您类型是 基本 数字类型,如整数或浮点数。它不适用于课程。而且你不能自己专门化它,所以你不能“修复”它,但你可以编写自己的类型特征来做任何你想做的事情。

顺便说一句,std::is_array<std::array<int, 5>> 也是假的!

【讨论】:

以上是关于为啥 std::valarray 不是算术的?的主要内容,如果未能解决你的问题,请参考以下文章

glibcxx STL 在 std::valarray::sum() 的实现中是不是不正确?

std::valarray 和 std::array 有啥区别

在哪里使用“std::valarray”是个好主意?

将数据从 std::vector 传递到 std::valarray 的最有效方法

将 std::vector 分配给 std::valarray

运算符 += 应用于 std::valarray<int*>