繁体   English   中英

ABS和使用命名空间标准

[英]Abs and using namespace std

假设我using namespace std (无疑是一种不好的做法 ),并且我在代码中使用了abs函数(以获取重载的绝对函数 )。 具体来说,我的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也具有仅返回intabs函数,如何调用“正确”的abs函数。

实际上, 这个问题的第二个答案是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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM