Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么malloc在全局命名空间中? 从我所理解的,介绍了C库的C++版本,如 STDLIB .H./C>( CSTDLIB < /C>),原因是全局命名空间没有受到污染。_C++_Language Lawyer - Fatal编程技术网

为什么malloc在全局命名空间中? 从我所理解的,介绍了C库的C++版本,如 STDLIB .H./C>( CSTDLIB < /C>),原因是全局命名空间没有受到污染。

为什么malloc在全局命名空间中? 从我所理解的,介绍了C库的C++版本,如 STDLIB .H./C>( CSTDLIB < /C>),原因是全局命名空间没有受到污染。,c++,language-lawyer,C++,Language Lawyer,但事实证明,我能够在全局名称空间中使用malloc,即使我没有#include 那么,为什么我应该#包括,然后使用std::malloc (我使用的是G+4.4.2版)< P>以前有一个要求,C标题( *.H/COD>)只把名字放入全局命名空间,相应的C++头只把名字放进 STD。结果证明这是不切实际的,而且常常没有得到遵守。因此,标准委员会标准化了现有实践,并修改了规则,使C标题必须将名称放入全局名称空间,可以将名称放入std,C++标题(必须< />强>将名称放入 STD< /COD> >

但事实证明,我能够在全局名称空间中使用
malloc
,即使我没有
#include

那么,为什么我应该
#包括
,然后使用
std::malloc


(我使用的是G+4.4.2版)

< P>以前有一个要求,C标题(<代码> *.H/COD>)只把名字放入全局命名空间,相应的C++头只把名字放进<代码> STD。结果证明这是不切实际的,而且常常没有得到遵守。因此,标准委员会标准化了现有实践,并修改了规则,使C标题必须将名称放入全局名称空间,可以将名称放入
std
,C++标题(<强>必须< />强>将名称放入<代码> STD< /COD> > <强> 5 < /强>将它们放入全局命名空间。< /P> 旧规则不切实际的原因很简单,就是它需要复制名称空间
std
中的所有C头内容,相应的维护负担是要更新两组代码。此外,在某些情况下,C头由完全独立的开发团队处理。这种方法的成本高得令人望而却步


要回答最后一个问题,请使用
#include
malloc
或使用
#include
std::malloc

任何标题都可以包括任何其他标题。我正在placement new操作符中使用malloc。不推荐使用
C标题,然而,许多代码仍然依赖于那些位于全局命名空间中的名称。这可能与标准明确允许
头将名称放入全局名称空间有关,也可能与此无关。编译器“允许”您,但标准不允许。该标准允许c*头在全局名称空间中放置符号,因为实现者发现只包含c头要容易得多。。请注意#include。几乎每个人都这样做,但它仍然需要连接。这两种方式中的哪一种在现实世界中使用?如果我可以走任何一条路,我应该用哪一条?我总是用eg
。但这是品味的问题。我总是使用
。但这是品味的问题,我总是两者都不用。但这是一个口味问题。@贝塔罗丁:在C++中,没有理由调用<代码> MalOC ,除非你与C库接口,否则转移所有权。如果你没有限制,可以选择任何方式,考虑第三个选项:<代码>运算符new < /代码>。