复杂的文字'i'用于函数参数

Lou*_*uen 20 c++ std complex-numbers

似乎有一个问题,使用C++中的文字istd::complex.

请考虑以下代码:

std::complex<double> a = -1.0i * 42.0;
std::complex<double> b = a + 1.0i;
Run Code Online (Sandbox Code Playgroud)

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

在函数调用中使用复杂文字时也会出现这种情况,例如

std::exp<std::complex<double>>( 1.0i * 3.14159 );
Run Code Online (Sandbox Code Playgroud)

为什么复杂的字面值1.0i不能转换为std::complex<double>

我必须明确地构建一个std::complex1.0i

use*_*670 24

你应该重新编译--std=c++14(没有GNU ext)以避免i后缀与gcc扩展冲突

ISO C++ 14库还定义了'i'后缀,因此包含<complex>头的C++ 14代码不能将'i'用于GNU扩展.'j'后缀仍然具有GNU含义.