为什么malloc在全局命名空间中
Why is malloc in global namespace?
据我所知,引入C++版本的C库(如stdlib.h
(cstdlib
))的原因之一是为了不污染全局命名空间。
但事实证明,我可以在全局命名空间中使用malloc
,即使我没有使用#include <stdlib.h>
。
那么,为什么我应该先使用#include <cstdlib>
,然后再使用std::malloc
呢?
(我使用的是g++版本4.8.2)
过去有一个要求,即C标头( 旧规则不切实际的原因很简单,因为它需要复制名称空间 要回答最后一个问题,请使用*.h
)只将名称放入全局命名空间,而相应的C++标头只将名称放在std
中。事实证明,这是不切实际的,而且经常得不到遵守。因此,标准委员会对现有做法进行了标准化,并更改了规则,使C头文件必须将名称放入全局命名空间,可以放入std
,C++头文件std
内的所有C头内容,而相应的维护负担是要更新两组代码。此外,在某些情况下,C头文件由一个完全独立的开发团队处理。这种方法的成本令人望而却步。#include <stdlib.h>
和malloc
或使用#include <cstdlib>
和std::malloc
。
相关文章:
- 在命名空间中使用全局命名空间中的函数
- 类与命名空间的全局实例
- 将好友从模板导出到全局命名空间
- Catalina C++:使用<cmath>标头产生错误:全局命名空间中没有名为 'signbit' 的成员
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- C++从 std::async 函数读取命名空间中的全局变量标志
- 为什么不允许在全局命名空间处阻止范围?
- 如何在命名空间中声明外部全局,然后定义它?
- 运算符<<依赖于参数的查找不在全局命名空间中查找
- 我可以停止 GCC 将标准库名称包含在全局命名空间中吗?
- 在C 中将全局函数包括在命名空间中
- 为什么在全局范围以及命名空间std中定义了size_t
- 如何处理警告 C4177:#pragma 'float_control' 只能在全局范围或命名空间范围内使用
- "uintmax_t":不是"全局命名空间"的成员
- C++项目中的全局命名空间
- 使用 "::member" 引用全局命名空间有什么用吗?
- 在全局命名空间中重载不依赖于用户定义类型的标准定义类型的运算符是否格式正确?
- 命名空间中的全局变量会导致"undefined reference to"
- 在C 中重新解析命名空间内的全局类型
- 命名空间全局变量丢失值 (C++)