为啥 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::vector 传递到 std::valarray 的最有效方法