C++中的abs函数

C++中的abs函数。在C++中使用abs函数要注意存在两种版本,一种是在stdlib.h中定义的版本,另一个是在cmath头文件中定义的。事实上在stdlib.h文件是C的函数,而cmath中的是C++版本。

根据ISO C/C++的标准规定,C语言的abs函数仅仅支持整数的绝对值计算,必须使用fabs才能获得浮点数的绝对值;C++的abs则可以自然支持对整数和浮点数两个版本(实际上还能够支持复数)。

如果在C++程序中,由于头文件关系,不慎使用了C版本的abs函数,并且输入的是一个有小数的浮点数,那么其行为就可能不符合程序员的预期了,因为在传入函数参数时,浮点数会用截断的方式转换为整数。

例如:

/* source file main.cpp */
#include <iostream>
#include <stdlib.h> // c function abs

int main(int argc, char* argv[])
{
  using namespace std;
  cout << "abs(0.123) = " << abs(0.123) << endl;
  return 0;
}

/* output */
abs(0.123) = 0

C++中建议使用cmath头文件,事实上不止abs函数,还有一系列函数都被特殊处理了。具体可以阅读不同编译器的cmathmath.hstdlib.h文件源代码。

微软的C++编译器在默认的情况下,使用宏对C版本abs函数做了保护处理,通常情况下程序员不容易发现这个问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,428评论 0 2
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,221评论 0 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,961评论 0 38
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,285评论 0 0
  • 01 看了一篇文章,“不要嫁老实的老公”,竟看得我一肚子不满意。 文章大意是说,按照传统,父母都愿意让女儿嫁一个老...
    热爱一生阅读 956评论 14 17