是std::命名空间中的C标准库函数的C++版本
Are C++ versions of C standard library functions in the std:: namespace?
"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>
)
相关文章:
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 有没有一个 c++ gmp 库函数与 python gmpy2 库 divm(..) 函数相同?
- 好友库函数可以访问子数据
- 覆盖程序中的标准 C 库函数C++
- VS2017 #error: : snprintf 的宏定义与标准库函数声明冲突
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 返回time()库函数的数据类型
- 将C++中的多个参数传递给MatLab共享库函数
- 从另一个动态链接库项目调用静态库函数
- 导入的库函数是否可以在内存中移动
- 带参数的线程调用库函数
- 在 MASM 中调用标准库函数
- char concat c++ 没有库函数
- 为什么C++ std::min_element 库函数接受采用布尔返回类型的函数对象的函子,而不是像 C 中那样的 in
- 如何在将指针传递给库函数时处理内存管理
- 使库函数模板化以避免编译器指令是否有益?
- 结构被库函数覆盖
- 如何在标准库C/C++函数中进行gdb单步执行操作
- 如何从 c++ 调用动态库函数
- 标准库函数 abs() 在不同C++编译器上的异常行为