目录
2.1.1. 命名空间里面除了可以定义变量之外,还可以定义函数、类型。
2.1.3.在编译阶段,同一级相同名字的命名空间可以自动合并
在介绍命名空间之前,先要介绍一下域的概念:
1.域
作用域,和访问还有生命周期有关系。
1.1.域的使用
- 在同一个域里面不能重复定义同一个名称的变量。
- 在不同的域里面能定义同一个名称的变量。
以c语言为例:
在全局域中定义一个 a 变量,就不能继续在全局域中定义a变量:
但是可以在局部域里面在定义一个a变量:
局部优先原则:
1.2. :: 域作用限定符
请注意: :: 域作用限定符左边是空白就默认代表访问的是全局域。
2.命名空间
C++为什么需要命名空间?
由于 C 在大型的项目中非常容易出现命名冲突,所以就有了C++命名空间的由来。
命名空间就是定义一个域:命名空间域。
如果我们定义的变量名和库里面的名称冲突了怎么办?
我们就可以使用命名空间来解决:
我们来演示一个编译器查找规则:
我们可以通过域作用限定符,来访问命名空间域中的变量:
2.1.命名空间的性质
2.1.1. 命名空间里面除了可以定义变量之外,还可以定义函数、类型。
2.1.2.命名空间可以多重嵌套
2.1.3.在编译阶段,同一级相同名字的命名空间可以自动合并
同一个工程中允许存在多个相同名称的命名空间,编译器最后会将其合并在同一命名空间中。
为了避免冲突,c++把标准库的东西定义到了自己官方的命名空间,这个命名空间的名称是 std,std 是C++官方库内容定义的命名空间。
2.2.命名空间的使用
命名空间的三种使用方式:
2.2.1.指定访问
在访问的对象前,加命名空间名称及作用域限定符。
2.2.2.全部展开
使用using namespace + 命名空间名称引入。
2.2.3.部分展开
使用using将命名空间中某个成员引入。
3. C++输入&输出
使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
<< 流插入运算符 >> 流提取运算符
实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,将在之后的博客介绍。
cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在< iostream >头文件中。
cout 是 console out的简写,控制台输出,特点是自动识别类型。
cin 是 console in简写,控制台输入,也可以自动识别类型。
endl换行,是endline的意思,换行。
使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。
劣势:
在输出时,指定如double类型的输出位数较为麻烦。在这种情况下推荐使用c语言的方式打印。
总而言之最后实现时,那种更方便就优先使用那种。
最后
终于迈入C++了,继续加油啊!!