当我将一个valarray数组除以其第一个元素时,只有第一个元素变为1,其他元素保持原始值。
#include <iostream>
#include <valarray>
using namespace std;
int main() {
valarray<double> arr({5,10,15,20,25});
arr=arr/arr[0]; // or arr/=arr[0];
for(int value:arr)cout << value << ' ';
return 0;
}
实际输出结果为:
1 10 15 20 25
预期输出为:
1 2 3 4 5
为什么实际输出结果与预期不符?
我使用的是带有-std=c++11选项的g++(4.8.1)编译器。
operator/
使用了对arr[0]
的引用。 - 463035818_is_not_a_numberoperator/
的签名是template <class T> std::valarray<T> operator/ (const std::valarray<T>& lhs, const std::valarray<T>& rhs);
(请注意const),因此不应修改输入,而应创建一个临时变量来存储其结果(然后返回它)。也许这是一些valarray
的魔法...你真的可以用/
和/=
得到相同的结果吗? - 463035818_is_not_a_numberoperator/
版本会按预期运行。也许这是g++的一个错误。 - apple apple