创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容💖:
专栏:c语言之路重点知识整合
【c语言】全部知识点总结
目录
- 一、作用域
- :: 作用域运算符
- 二、命名空间
- 使用命名空间
- 三、为什么需要using namespace std ?
本文深入探究一下为什么在编写C++程序时,需要在头文件下面添加using namespace std;
这句代码代表了什么呢?
一、作用域
在之前的c语言中提到过全局变量 【c语言】全局变量的生命周期与作用域
全局变量的生命周期长,从程序启动到程序关闭
在主函数外定义为全局变量,存放在全局/静态区,未初始化默认是0
我们也可以在C++中定义一个全局变量:
根据【c语言】全局变量的生命周期与作用域 中提到的就近原则,这段代码的输出结果为字符T
如果此时在主函数中有这样一个需求:既要输出局部变量’ T ‘,又要输出全局变量’ i ',应该如何实现呢?
可以使用::
即作用域运算符
来控制输出
:: 作用域运算符
某个作用域 :: 成员变量 使用该作用域内的成员变量
::未指定作用域,默认全局作用域
#include <iostream>
using namespace std;
char c = 'i';
int main()
{
char c = 'T';
cout << c << endl;
// :: 作用域运算符 某个作用域 :: 成员变量 使用该作用域内的成员变量
// ::未指定作用域,默认全局作用域
cout << ::c << endl;
return 0;
}
使用::
来指定一个作用域,std
就是一个作用域,即全局作用域,直接使用:c
就能输出全区变量中的字符c(i)
而未添加::直接输出的就是局部变量中的字符c(T)
常用的作用域有命名空间、结构体、类等
对于全局和局部作用域可以定义相同的成员
但如果是同一个作用域中存在相同的成员,则会报重定义的错误
此时可以使用命名空间去区分
二、命名空间
命名空间可以用来区分同一作用域下的相同成员
通过
namespace 命名空间名 {
变量..
函数..
结构体...
};
这种格式来定义命名空间
其中,namespace
是C++中的关键字,用来定义命名空间。
例如:定义A B两个命名空间,并定义成员 字符c:
#include <iostream>
using namespace std;
namespace A {
char c = 'a';
};
namespace B {
char c = 'n';
};
使用命名空间
使用命名空间有两种方法
1.打开命名空间 using namespace…
这种方法就是我们使用的的using namespace std;
同理,打开命名空间A就是using namespce A;
打开命名空间B就是using namespace std;
#include <iostream>
using namespace std;
namespace A {
char c = 'a';
};
namespace B {
char c = 'n';
};
using namespace A; //打开命名空间 A
打开命名空间 A后,
#include <iostream>
using namespace std;
namespace A {
char c = 'a';
};
namespace B {
char c = 'n';
};
using namespace A;
int main()
{
char c = 'T';
cout << c << endl;
// :: 作用域运算符 某个作用域 :: 成员变量 使用该作用域内的成员变量
// ::未指定作用域,默认全局作用域
cout << ::c << endl;
return 0;
}
这里的::c
输出结果就为命名空间A中的字符’a’
使用命名空间的另一种方法:
2.使用作用域 某作用域::成员
前面提到了作用域操作符::
可以通过这种方法来控制输出A或B作用域中的成员输出
例如:使用A命名空间中的字符c输出,结果也是命名空间A中的字符’a’
cout << A::c << endl;
三、为什么需要using namespace std ?
其实,观察我们常用的cin
和cout
输入输出函数还有endl
换行,他们就是使用了std这个标准命名空间:
因此,如果没有添加using namespace std;
这句话,即没有打开标准命名空间,直接使用cin 和cout endl就会进行报错
在我们了解了使用命名空间的方法后,也就理解了为什么在编写C++程序时,需要在头文件下面添加using namespace std;
就是因为输入输出cin cout依赖std标准命名空间
我们学习了两种打开命名空间的方法,另一种使用作用域操作符::
是否可行呢?
答案是 当然可以,这两种方法都可以打开某个命名空间
这种方式简单直接,但是每次使用的时候都需要指明命名空间
注:using namespace 命名空间,这是一种懒惰的做法
打开一次里面的成员将全部对外开放。打开了多个命名空间如果成员名相同会出现二义性
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |