Yan-英杰的主页
悟已往之不谏 知来者之可追
C++程序员,2024届电子信息研究生
目录
1.命名空间
a.命名空间定义
(1)、 域作用限定符
(2)、域访问顺序
2.C++的输入&&输出
1.C语言存在命名冲突的问题,库之间的冲突
2.我们互相之间的冲突
//域
namespace YanYingjie
{
int rand = 0;
}
::域作用限定符,修改了其访问顺序,使得其不访问局部域,直接访问全局域
int a = 0;
int main()
{
int a = 1;
printf("%d\n",a);
printf("%d",::a);
return 0;
}
访问顺序:局部域->全局域->命名空间域
访问命名空间域的前提:
①、展开命名空间域
展开命名空间域之后,命名空间域相当于暴露在全局,此时,命名空间域
变成了全局变量,如果同时访问命名空间域和全局变量则直接报错,展开意味着,是否去命名空间
内部进行搜索
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
//为什么不加.h
//早些年时候,确实存在.h,很老的编译器确实可以使用vc6.0 没有命名空间
//强制使用则会报错
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;
}
注:std::cout和std::endl,厉害的地方在于自动识别数据类型
C++和C语言可以混着用,哪个方法方便使用哪个
#include
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
cout<<"Hello world!!!"<
using namespace std;
int main()
{
int a;
double b;
char c;
// 可以自动识别变量的类型
cin>>a;
cin>>b>>c;
cout<
#include
using namespace std;
int main()
{
int a;
double b;
char c;
// 可以自动识别变量的类型
cin>>a;
cin>>b>>c;
cout<
1. 在日常练习中,建议直接using namespace std即可,这样就很方便。2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对 象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模 大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +using std::cout展开常用的库对象/类型等方式。