.h为后缀,它们所包含的类、函数、宏等都是全局范围的。std。std 是 standard 的缩写,意思是“标准命名空间”。.h,所以老式 C++ 的iostream.h变成了iostream,fstream.h变成了fstream。而对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c字母,所以C语言的stdio.h变成了cstdio,stdlib.h变成了cstdlib。注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧的头文件和新的头文件不一定完全对应。3) 标准C头文件如 stdio.h、stdlib.h 等继续被支持。头文件的内容不在 std 中。
.h的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带.h的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。#include <cstdio>这种形式,那么符号可以位于命名空间 std 中,也可以位于全局范围中,请看下面的两段代码。
#include <cstdio>
int main(){
std::printf("http://c.biancheng.net\n");
return 0;
}
#include <cstdio>
int main(){
printf("http://c.biancheng.net\n");
return 0;
}
这两种形式在 Microsoft Visual C++ 和 GCC 下都能够编译通过,也就是说,大部分编译器在实现时并没有严格遵循C++标准,它们对两种写法都支持,程序员可以使用 std 也可以不使用。
#include <iostream>
#include <string>
int main(){
//声明命名空间std
using namespace std;
//定义字符串变量
string str;
//定义 int 变量
int age;
//从控制台获取用户输入
cin>>str>>age;
//将数据输出到控制台
cout<<str<<"已经成立"<<age<<"年了!"<<endl;
return 0;
}
运行结果:using namespace std;,它声明了命名空间 std,后续如果有未指定命名空间的符号,那么默认使用 std,代码中的 string、cin、cout 都位于命名空间 std。
#include <iostream>
void func(){
//必须重新声明
using namespace std;
cout<<"http://c.biancheng.net"<<endl;
}
int main(){
//声明命名空间std
using namespace std;
cout<<"C语言中文网"<<endl;
func();
return 0;
}
如果希望在所有函数中都使用命名空间 std,可以将它声明在全局范围中,例如:
#include <iostream>
//声明命名空间std
using namespace std;
void func(){
cout<<"http://c.biancheng.net"<<endl;
}
int main(){
cout<<"C语言中文网"<<endl;
func();
return 0;
}
很多教程中都是这样做的,将 std 直接声明在所有函数外部,这样虽然使用方便,但在中大型项目开发中是不被推荐的,这样做增加了命名冲突的风险,我推荐在函数内部声明 std。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有