【发布时间】:2016-08-27 06:45:20
【问题描述】:
当我运行此代码on ideone.com 时,它会打印(2,3):
#include <iostream>
#include <complex>
int main() {
std::complex<double> val = 2 + 3i;
std::cout << val << std::endl;
return 0;
}
但是当我在 macOS 10.11.6 上使用 clang 时,我没有收到任何错误或警告,但输出是 (2,0):
$ clang --version
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
$ clang -lc++ test.cpp && ./a.out
(2,0)
虚部发生了什么?我做错了吗?
【问题讨论】:
-
你试过this和clang吗?
-
刚刚做了。结果相同。
-
Clang编译命令不应该是
clang++ -std=c++14吗? -
有趣。
-std=c++14触发错误no matching literal operator for call to 'operator""i' ...。为什么它会在没有这个的情况下编译? -
@jtbandes 用户定义文字作为 语言 特性是 C++11 的一部分。 string、chrono、complex 的文字运算符被放入 C++14 的 library 中。因此 C++11 编译器知道
3i是用户定义的文字,但无法在任何库中找到operator""i(unsigned long long n)。
标签: c++ c++11 clang complex-numbers user-defined-literals