在Qt 4.8中
当我#include <cstring>
时,我发现我可以直接使用memcpy
。
为什么我不需要使用std::memcpy
?
为什么编译器不报告错误?
答案 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
中可见。