std::abs帮你写出愚蠢Bug
在C++中,std::abs
的使用十分方便。函数签名包括:
int abs(int);
long abs(long);
long long abs(long long);
double abs(double);
...
这样可以说省去了很多选择函数名字的麻烦。在模板中使用这些函数也没有什么问题。然而,这些函数都位于std
命名空间中。在全局命名空间中,只有以下这些:
int abs(int);
long labs(long);
long long llabs(long long);
double fabs(double);
...
因此,可能会遇到以下的问题:
abs(3.1); // 结果是3!
所以,总之要么老老实实加前缀,要么加名字空间。