【发布时间】:2016-12-27 18:44:31
【问题描述】:
假设我正在使用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
我不明白在后一种情况下如何调用“正确”的 abs 函数,因为即使 stdlib.h 也有一个仅返回 int 的 abs 函数。
事实上,this question 的第二个回答说使用using namespace std; 可能不够。这是真的?我的 MWE 似乎与此相矛盾。
我在 Linux 上使用 gcc-4.8,这可以说是解决依赖关系最成问题的组合。
【问题讨论】:
-
无法复制。为我工作,使用 gcc 6.2.1
-
您的程序也适合我。一定是编译器问题。
-
更新为包含编译器版本 gcc-4.8。
标签: c++ namespaces std absolute-value