【发布时间】:2019-01-15 11:34:00
【问题描述】:
似乎有问题,在 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>?
我必须用1.0i 显式构造一个std::complex 吗?
【问题讨论】:
-
哪个编译器和版本?这可以在 GCC 主干、Clang 主干和稍旧版本的 MSVC 上为我编译。
-
例如ideone的gcc 6.3,如下图:ideone.com/qxw5eI
标签: c++ std complex-numbers