是std::命名空间中的C标准库函数的C++版本

Are C++ versions of C standard library functions in the std:: namespace?

本文关键字:库函数 C++ 版本 标准 命名空间 std      更新时间:2023-10-16

"C++Primer"(第5版)在91页上说明了包含C标准库头的C++版本而不是.h版本的优点:这样,包含的名称最终会出现在std::命名空间中,并且不会污染全局命名空间。

我尝试包含cstdio,并惊讶地发现我可以在不指定std::的情况下使用printf()。有趣的是,仅包括iostream或仅包括string也足以访问全局printf()。我是不是错过了什么?

我正在用g++ 4.8.2-Wall -Wextra -Werror -std=c++11编译。

<cfoo>是否也将名称放入全局命名空间是未指定的。所有C库名称都保留在C++中的全局命名空间中。

[外部名称]/3:

用外部链接声明的标准C库中的每个名称都保留给实现,用作命名空间std和全局命名空间中extern "C"链接的名称。

重申一下:

  • 要在std中使用名称,必须包含正确的标头
  • 在上述上下文中,不能重新定义C标准库中的任何名称
  • 没有说明是否声明C标准库中的任何特定名称(除非明确包含不推荐使用的标头<foo.h>