2017-01-22 136 views
0

在Qt 4.8使用memcpy使用Qt 4.8

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

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

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

回答

1

的标准说(§17.5.1.2/ 4)

除了通过30和附件d如项17所指出的,每一个报头CNAME的内容是一样的 使得相应的头文件name.h按照C标准库(1.2)的规定。但是,在C++标准 库中,声明(C中定义为宏的名称除外)位于名称空间std的名称空间范围(3.3.6)内。没有指定这些名称(包括在第18章至第30章和附录D中添加的任何重载 )是否首先在全局命名空间范围内声明,然后 通过显式使用声明(7.3.3)注入命名空间std。

所以,当你有<cstring>名称是命名空间std::可用,但它是允许的名字也是在全局命名空间。

同样,当你包括<string.h>名称是保证在全局命名空间,但也可能是在命名空间std可见。