C++中的abs函数

2018-08-08  本文已影响65人  DarkBubble

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函数做了保护处理,通常情况下程序员不容易发现这个问题。

上一篇 下一篇

猜你喜欢

热点阅读