说我正在使用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
我不明白的是&#34;纠正&#34;在后一种情况下调用abs函数,因为即使stdlib.h还有一个abs
函数,它只返回int
&#39; s。
事实上,this question的第二个答案表示使用using namespace std;
可能不够。这是真的?我的MWE似乎与此相矛盾。
我在Linux上使用gcc-4.8,这可能是解决依赖关系问题最多的组合。
答案 0 :(得分:5)
使用时
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)
。