在Qt 4.8中使用没有命名空间的memcpy

时间:2017-01-22 13:09:03

标签: c++ qt

在Qt 4.8中

当我#include <cstring>时,我发现我可以直接使用memcpy

为什么我不需要使用std::memcpy

为什么编译器不报告错误?

1 个答案:

答案 0 :(得分:1)

标准说(§17.5.1.2/ 4)

  

除第17至30条及附件D所述外,每个标题 cname 的内容与   C标准库(1.2)中指定的相应标题 name.h 的标题。在C ++标准中   但是,声明(除了在C中定义为宏的名称除外)在命名空间std的命名空间范围(3.3.6)内。未指定是否添加了这些名称(包括任何重载)   在第18至30条和附件D)中,首先在全局命名空间范围内声明,然后是   通过显式使用声明(7.3.3)注入到命名空间std中。

因此,当您包含<cstring>时,名称在名称空间std::中可用,但允许名称也在全局名称空间中。

同样,当您包含<string.h>时,该名称将保证在全局名称空间中,但也可能在名称空间std中可见。