Art*_*ium 18 c++ math stl std complex-numbers
以下代码与VS2010打印0,与我的期望相反:
#include <complex>
#include <iostream>
using namespace std;
int main(void)
{
complex<int> z(20, 200);
cout << abs<int>(z) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的类型是正常的double.
tem*_*def 23
根据C++ ISO规范,§26.2/ 2:
将模板实例化为
complex除float(double或未long double指定)之外的任何类型的效果.
换句话说,编译器可以在实例化时执行任何操作complex<int>.从语言的角度来看,你在这里获得0的事实是非常明确的行为.
为了比较 - 在ideone的gcc版本上,这段代码甚至都没有编译.这是另一个完全有效的选择.
希望这可以帮助!
在MinGW 4.6.2上打印200.
但是,在C++ ISO标准第26.2.2节中:
将模板实例化为
complex除float(double或未long double指定)之外的任何类型的效果.
因此,您的构建环境表现出未定义的行为complex<int>,这与标准不符.
正如所templatetypedef指出的,ideone的C99编译器(GCC 4.3.4)拒绝完全编译它.