假设我正在使用using namespace std
(不可否认地为bad practice),并且我在代码中使用了abs
函数(以获取the overloaded absolute function)。具体来说,我的MWE为:
#include <cmath>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char* argv[]) {
double f(-0.4);
std::cout<<"abs(f) = "<<abs(f)<<std::endl;
}
如果我注释掉
using namespace std;
行,则输出为abs(f) = 0
否则输出是
abs(f) = 0.4
我不明白的是,在后一种情况下,即使stdlib.h都有一个仅返回
abs
的int
函数,如何调用“正确的” abs函数。实际上,对this question的第二个回答说使用
using namespace std;
可能还不够。这是真的?我的MWE似乎与此矛盾。我在Linux上并使用gcc-4.8,可以说这是解决依赖性的最成问题的组合。
最佳答案
使用时
using namespace std;
您将以下
abs
重载纳入范围:std::abs(int)
std::abs(float)
std::abs(std::complex)
呼叫
abs(f)
解析为std::abs(float)
。如果你不使用
using namespace std;
您只能使用一个
abs
函数。abs(int)
因此,呼叫
abs(f)
解析为abs(int)
。您仍然可以删除
using namespace std;
行并使用std::abs(f)
而不只是abs(f)
。关于c++ - ABS和使用命名空间标准,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41350536/