使用gcc 4.9
我发现使用类型文字为复数生成的类型与通过常规方式创建的类型不同,即:
typeid(complex<double>(0.0,1.0)) != typeid(1.0i)
- 我在这里犯错了吗?
- 这是编译器错误还是预期的标准行为?
- 如果预期的标准行为:背后的理由是什么?
添加缺少的 MCVE
#include <complex>
using std::complex;
using namespace std::literals::complex_literals;
#include <iostream>
using std::cout;
using std::endl;
#include <typeinfo>
int main(int argc, char* argv[]) {
if (typeid(complex<double>(0.0, 1.0)) == typeid(1.0i))
cout << "types are same as expected" << endl;
else
cout << "types are unexpectedly not the same" << endl;
cout << 1.0i*1.0i << endl;
cout << complex<double>(0.0, 1.0)*complex<double>(0.0, 1.0) << endl;
}
编译说明:
g++ -std=gnu++14 complex.cpp -o complex.exe
输出:
types are unexpectedly not the same
1
(-1,0)
有趣的是,文字甚至似乎都不是一个适当的虚数。(我确定我忽略了一些东西......)