Yan-英杰的主页
悟已往之不谏 知来者之可追
C++程序员,2024届电子信息研究生
目录
1.命名空间
1.C语言存在命名冲突的问题,库之间的冲突
2.我们互相之间的冲突
a.命名空间定义
//域
namespace YanYingjie
{
int rand = 0;
}
(1)、 域作用限定符
::域作用限定符,修改了其访问顺序,使得其不访问局部域,直接访问全局域
int a = 0;
int main()
{
int a = 1;
printf("%d\n",a);
printf("%d",::a);
return 0;
}
(2)、域访问顺序
访问顺序:局部域->全局域->命名空间域
访问命名空间域的前提:
①、展开命名空间域
展开命名空间域之后,命名空间域相当于暴露在全局,此时,命名空间域
变成了全局变量,如果同时访问命名空间域和全局变量则直接报错,展开意味着,是否去命名空间
内部进行搜索
using namespace yqy;
②、指定访问命名空间域
int a = 0;
namespace yqy
{
int a = 2;
}
int main()
{
//int a = 1;
printf("%d\n",a);
printf("%d",yqy::a);
return 0;
}
namespace之间可以互相嵌套
namespace N1
{
int a = 0;
int b;
int c;
int Add(int left,int right)
{
return left + right;
}
namespace N2
{
int a = 1;
int b;
int c;
int Add(int left, int right)
{
return left + right;
}
}
}
int main()
{
int left = 1;
int right = 2;
printf("%d",N1::Add(left,right));
return 0;
}
问题:
为什么头文件没有.h
//头文件,又称io流
#include<iostream>
//为什么不加.h
//早些年时候,确实存在.h,很老的编译器确实可以使用vc6.0 没有命名空间
//强制<iostream.h>使用则会报错
std是C++标准库,using namespace std;意味着,编译过程中,可以直接去std库中进行
访问,但是直接展开并不好,如果我们的定义,如果与库中的内容冲突,则会报错,最好用谁,
展开谁,项目里面尽量不要展开
解决方法:我们可以把常用的函数展开,using std::cout; using std::endl;
using namespace std;
int main()
{
std::cout << "hello world" << std::endl;
cout << "hello world" << endl;
return 0;
}
2.C++的输入&&输出
说明:
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型。
5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有
一个章节更深入的学习IO流用法及原理
C++和C语言可以混着用,哪个方法方便使用哪个
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
char c;
// 可以自动识别变量的类型
cin>>a;
cin>>b>>c;
cout<<a<<endl;
cout<<b<<" "<<c<<endl;
return 0;
}
注意:早期标准库将所有功能在全局域中实现,声明在.h 后缀的头文件中,使用时只需包含对应 头文件即可,后来将其实现在 std 命名空间下,为了和 C 头文件区分,也为了正确使用命名空间,
规定 C++ 头文件不带 .h ;旧编译器 (vc 6.0) 中还支持 <iostream.h> 格式,后续编译器已不支持,因
此 推荐 使用 <iostream>+std 的方式。
#include <iostream>
using namespace std;
int main()
{
int a;
double b;
char c;
// 可以自动识别变量的类型
cin>>a;
cin>>b>>c;
cout<<a<<endl;
cout<<b<<" "<<c<<endl;
return 0;
}
std 命名空间的使用惯例:
std是C++标准库的命名空间,如何展开std使用更合理呢?