为什么 abs(complex<int>) 总是返回零?
Why does abs(complex<int>) always return zero?
以下带有VS2010的代码打印0
,与我的期望相反:
#include <complex>
#include <iostream>
using namespace std;
int main(void)
{
complex<int> z(20, 200);
cout << abs<int>(z) << endl;
return 0;
}
当类型为double
时,它工作正常。
根据 ISO 规范 C++ §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)拒绝完全编译它。
相关文章:
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- 如何正确重载 << 运算符以返回 int 值?
- 返回 int 时的分段错误
- 返回int数据类型v/s传递参考
- char*中存储的返回int值(0-255)给出了负值
- C++. 面试. 关于返回 int* 值问题的范围
- 调用从Java返回INT值的C 函数
- 使用 static int 返回 int&in 函数
- 从函数 CPP 返回 int 或 string.c_str() 时的两个不同的行为
- 超能力 NDK 安卓:返回 int 在"extern"块中成功,在调用函数中失败
- 如何使用 boost::bind 将返回 int 的函数转换为返回布尔值的函数
- 为什么在应该返回对象的方法中返回 int 是有效的
- main() 总是返回 int
- 从函数返回"int * const"
- C++函数向字符串变量返回int
- 从返回int的函数中获取char的正确方法
- 为什么这个阶乘函数返回int而不是double
- 为什么 isnan、isinf 和 isfinite 返回 int 而不是布尔值
- 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 而不返回语句的函数不同