在啥意义上 valarray 没有混叠?

Posted

技术标签:

【中文标题】在啥意义上 valarray 没有混叠?【英文标题】:In what sense is valarray free from aliasing?在什么意义上 valarray 没有混叠? 【发布时间】:2014-10-20 17:20:04 【问题描述】:

经常有人声称std::valarray 旨在消除某些形式的别名以实现更好的优化(例如,参见valarray vs. vector: Why was valarray introduced?)

谁能详细说明这一说法?在我看来,只要您可以获得指向元素的指针,别名总是可能的——您可以获得,因为operator[] 返回一个引用。

【问题讨论】:

不同之处在于,如果有别名,那是你的错;-) 使用 valarray 你承诺不这样做。 【参考方案1】:

“无别名”是指像cos 这样接受valarray 作为参数的全局函数。 cos(或任何函数)被应用于整个数组,编译器和标准库实现可以假设数组没有别名并且可以独立地对每个元素执行操作。

它也指诸如valarrayoperator+之类的东西,它会进行成员添加等。

【讨论】:

"可以假设数组没有别名" - 没有别名,为什么valarray 是这种情况而不是任何其他类型的数组?

以上是关于在啥意义上 valarray 没有混叠?的主要内容,如果未能解决你的问题,请参考以下文章

在处理错误时,在啥意义上,使用异常比使用 if...else...switch... 等更好?

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

SSE / AVX 对齐内存上的 valarray

4.4 超采样

4.3 抗锯齿(混叠)

如何在没有冗余计算的 if 语句中使用 std::valarray?