【发布时间】:2016-11-24 12:03:26
【问题描述】:
考虑下面的代码
#include <complex>
#include <iostream>
int main(int argc, char **argv)
{
std::complex<double> a = 1+1i;
std::cout<<"a ="<<a<<"\n";
return 0;
}
当我使用 Apple LLVM 版本 8.0.0 (clang-800.0.42.1) 进行编译时,我得到的输出是
a =(1,0)
谁能解释为什么虚部被初始化为零?
【问题讨论】:
-
似乎工作正常:ideone.com/Qa7698 您是否忘记重新编译?
-
我使用的是 Apple LLVM 版本 8.0.0 (clang-800.0.42.1)。不是 g++!。我会编辑帖子
-
添加 using 声明
using namespace std::literals::complex_literals;时会发生什么? -
Repro: melpon.org/wandbox/permlink/QBES5VmGeMrfvZoT GCC 扩展和 C++ 复杂文字之间可能存在一些不兼容。我猜 GCC 扩展可以转换为双精度(实部),所以
1+1i被转换为双精度,然后该结果用于初始化 std::complex。
标签: c++ std complextype