下列哪些头文件包含在std命名空间中?( 二 )


#include <cstdio>int main(){ std::printf("***\n"); return 0;}2) 不使用命名空间 std:
#include <cstdio>int main(){ printf("***\n"); return 0;}这两种形式在 Microsoft Visual C++ 和 GCC 下都能够编译通过,也就是说,大部分编译器在实现时并没有严格遵循C++标准,它们对两种写法都支持,程序员可以使用 std 也可以不使用 。
第 1) 种写法是标准的,第 2) 种不标准,虽然它们在目前的编译器中都没有错误,但我依然推荐使用第 1) 种写法,因为标准写法会一直被编译器支持,非标准写法可能会在以后的升级版本中不再支持 。
使用C++的头文件
虽然 C++ 几乎完全兼容C语言,C语言的头文件在 C++ 中依然被支持,但 C++ 新增的库更加强大和灵活,请读者尽量使用这些 C++ 新增的头文件,例如 iostream、fstream、string 等 。
前面几节我们使用了C语言的格式输出函数 printf,引入了C语言的头文件 stdio.h,将C代码和 C++ 代码混合在了一起,我不推荐这样做,请尽量使用 C++ 的方式 。下面的例子演示了如何使用 C++ 库进行输入输出:
#include <iostream>#include <string>int main(){ //声明命名空间std using namespace std; //定义字符串变量 string str; //定义 int 变量 int age; //从控制台获取用户输入 cin>>str>>age; //将数据输出到控制台 cout<<str<<"已经成立"<<age<<"年了!"<<endl; return 0;}运行结果:
C语言中文网↙
6↙
C语言中文网已经成立6年了!
string 是 C++ 中的字符串类,初学者可以将 string 看做一种内置的数据类型,就像 int、float 等,可以用来定义变量 。cin 用于从控制台获取用户输入,cout 用于将数据输出到控制台,下节我们会详细讲解 。
读者暂时不需要深入了解这段代码的细节,只需要留意using namespace std;,它声明了命名空间 std,后续如果有未指定命名空间的符号,那么默认使用 std,代码中的 string、cin、cout 都位于命名空间 std 。
在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明,请看下面的例子:
#include <iostream>void func(){ //必须重新声明 using namespace std; cout<<"***"<<endl;}int main(){ //声明命名空间std using namespace std; cout<<"C语言中文网"<<endl; func(); return 0;}如果希望在所有函数中都使用命名空间 std,可以将它声明在全局范围中,例如:
#include <iostream>//声明命名空间stdusing namespace std;void func(){ cout<<"***"<<endl;}int main(){ cout<<"C语言中文网"<<endl; func(); return 0;}很多教程中都是这样做的,将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,我推荐在函数内部声明 std 。
【下列哪些头文件包含在std命名空间中?】不过为了方便,本教程还是忍不住违反了原则,后面有很多代码都在全局范围内声明了 std 。

推荐阅读