假设我正在使用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都有一个仅返回absint函数,如何调用“正确的” 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/

10-11 22:40
查看更多