【问题标题】:Complex literal 'i' used in function argument函数参数中使用的复杂文字“i”
【发布时间】:2019-01-15 11:34:00
【问题描述】:

似乎有问题,在 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&lt;double&gt;’ and ‘__complex__ double’)

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

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

为什么复杂的文字 1.0i 不能转换为 std::complex&lt;double&gt;

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

【问题讨论】:

标签: c++ std complex-numbers


【解决方案1】:

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

ISO C++14 库还定义了“i”后缀,因此包含 &lt;complex&gt; 标头的 C++14 代码不能将“i”用于 GNU 扩展。 ‘j’ 后缀仍然具有 GNU 的含义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 2012-03-31
    • 2014-08-28
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多