在Qt4.8中使用不带命名空间的memcpy

use memcpy without namespace in Qt 4.8

本文关键字:命名空间 memcpy Qt4      更新时间:2023-10-16

在问题4.8 中

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

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

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

标准规定(§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中可见。