Abs和使用命名空间std

时间:2016-12-27 18:44:32

标签: c++ namespaces std absolute-value

说我正在使用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,这可能是解决依赖关系问题最多的组合。

1 个答案:

答案 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)