以下代码在 cl.exe 中运行良好(产生预期输出 2, 9.9)。
对于 g++,使用 -O3 优化时根本不会产生任何输出,而使用 -O1 和 -O2 优化时会产生错误的输出 (1,10)。
g++ 的版本是 12.2.0,从 Windows 10 中的命令窗口运行。
我对 auto 和 valarray 有错误的期望,还是我只是做了一些愚蠢的事情?
#include <iostream>
#include <valarray>
int main()
{
double dx = 0.1;
std::valarray<double> Y{ 1.0, 10.0 };
// Works fine with g++, all optimisation levels
// std::valarray<double> dY1 = dx * std::valarray<double>{ Y[1], -Y[0] };
// Y += dY1;
// Fails completely with g++ -O3; gives wrong answer with -O1 and -O2; works fine with cl.exe
auto dY2 = dx * std::valarray<double>{ Y[1], -Y[0] };
Y += dY2;
std::cout << Y[0] << '\t' << Y[1] << '\n';
}