函数参数中使用的复杂文字'i'

时间:2018-08-08 09:03:55

标签: c++ std complex-numbers

在C ++中将literal istd::complex一起使用似乎有问题。

考虑以下代码:

std::complex<double> a = -1.0i * 42.0;
std::complex<double> b = a + 1.0i;

第二行无法编译为: error: no match for ‘operator+’ (operand types are ‘std::complex<double>’ and ‘__complex__ double’)

当在函数调用中使用复杂文字时,例如,

std::exp<std::complex<double>>( 1.0i * 3.14159 );

复杂的文字1.0i为何不能转换为std::complex<double>

我必须用std::complex显式构造一个1.0i吗?

1 个答案:

答案 0 :(得分:24)

您应使用--std=c++14重新编译(无GNU ext),以避免后缀igcc extension冲突

  

ISO C ++ 14库还定义了“ i”后缀,因此包含<complex>标头的C ++ 14代码不能对GNU扩展使用“ i”。 “ j”后缀仍然具有GNU含义。