在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!

所以,总之要么老老实实加前缀,要么加名字空间。