在C++中使用标准C函数时,是否需要"std ::"前缀?

Yis*_*ang 15 c c++

在C++中使用标准C函数时,我们应该为每个函数添加前缀std::吗?

例如(文件名:) std.C:

#include <cstdio>

int main() {
  std::printf("hello\n");
  printf("hello\n");
}
Run Code Online (Sandbox Code Playgroud)

该文件可以编译为:

g++ -Wall -Werror -std=c++11 std.C
Run Code Online (Sandbox Code Playgroud)

没有任何错误.

我的问题是:

  1. std::在C++中使用它们时,我们是否应该始终放在所有标准C库函数之前?
  2. 什么是头文件等之间的主要区别<stdio.h><cstdio>

Alp*_*per 11

C++库包含与在头文件的相同结构中组织的C语言库相同的定义,但有以下区别:

  • 每个头文件与C语言版本具有相同的名称,但带有" c"前缀且没有扩展名.例如,C语言头文件的C++等价物<stdlib.h><cstdlib>.
  • 库的每个元素都在std命名空间中定义.

然而,为了与C兼容,传统的头名称 name.h(如stdlib.h)在全局命名空间中也提供了相同的定义,尽管它的使用在C++中已被弃用.

(来源)

调用的std::一部分std::printf()是在标准库中使用名称的标准方法,因此,我建议使用它.