在C ++中将literal i
与std::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
吗?
答案 0 :(得分:24)
您应使用--std=c++14
重新编译(无GNU ext),以避免后缀i
与gcc extension冲突
ISO C ++ 14库还定义了“ i”后缀,因此包含
<complex>
标头的C ++ 14代码不能对GNU扩展使用“ i”。 “ j”后缀仍然具有GNU含义。