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
我不明白的是如何在后一种情况下调用"正确"的ABS函数,因为即使stdlib.h也具有仅返回int
'S的abs
函数。
实际上,这个问题的第二个答案说,使用using namespace std;
May 不够。这是真的?我的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)
。
相关文章:
- 标准::时间::d类型的挥发性对象
- 重载运算符 + 用于向量:命名空间标准
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 如何在不使用命名空间标准的情况下取消设置ios::fixed
- 我可以停止 GCC 将标准库名称包含在全局命名空间中吗?
- 兼容的声明 __attribute__ ((节( ".abc.dfe" ))) 常量易失性 uint8 属性变量 = 0;- 符合MISRA标准
- 关于"使用命名空间标准"的问题?
- 从另一个命名空间访问标准命名空间数据成员
- 在全局命名空间中重载不依赖于用户定义类型的标准定义类型的运算符是否格式正确?
- 无法使用名称空间,也不能在我的.h文件中包含标准的C 库
- 正在使用命名空间标准;必需的
- 强制标准名称空间的命名空间范围
- 如何为标准功能分配空间并做记忆
- fabsf 是 C++11 中标准命名空间的一部分吗?
- C++命名空间std的定义方式/位置(文档/标准链接)
- ABS并使用命名空间性标准
- 使用从较新的C++标准向后移植的类型和模板扩展命名空间 std
- 在C Plus中使用标准名称空间
- 如何复制/设置易失性标准::字符串
- 依赖名称解析&命名空间std /标准库