[英]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也具有仅返回int
的abs
函数,如何调用“正确”的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.