文章目录
一、关键字
命名时要避开这些关键字
二、命名空间
1. 命名空间的作用
在C/C++中,变量、函数和类都是大量存在的,
这些变量、函数和类的名称都会存在于全局作用域中,这么一来就会导致命名的冲突。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。
举个例子
#include<stdio.h>
//存在名为rand的函数
#include<stdlib.h>
namespace Name{
int rand=233;
}
int main()
{
printf("%d",Name::rand);
return 0;
}
**这里的" : : "被称为作用域限定符,命名空间起到一种隔离的作用,避免命名冲突。**
### 2.命名空间的套娃 **注意 :命名空间必须定义在全局变量。** **命名空间非结构体定义,括号之后不能加分号**
命名空间里的内容,不仅可以存放变量,还可以放结构体,类,甚至另一个命名空间,实现无限套娃。
命名空间无论套多少层都是全局的
3.命名空间的重复定义
同一个工程中允许存在多个相同的命名空间,编译器最后会将它们合成到一起。
4.命名空间的展开
经常使用命名空间girl中身高的要经常调用
girl::tall
因为麻烦,所以我们可以使用using展开命名空间
using namespace 空间名;
如此,空间名中的变量变为全局变量可以随意使用,但是也失去了隔离的效果。
所以,我们可以只展开命名空间中的一个变量,例如
using girl::tall
5.匿名命名空间
又称匿名结构体
未给匿名空间命名会自动产生一个空间名
总结
命名空间用来隔离,避免命名冲突
共三种使用方式
1.空间名+: :(作用域限制符)
girl::tall
2.使用 using namespace 命名空间名称引入 (会破坏隔离效果)
using namespace girl;
int r=tall;
3.使用 using 将命名空间中成员引入
using girl::tall;
int r=tall;
三、输入输出
1.库的展开
库也是会用命名空间的,
C++库的实现定义包含在了一个叫 std 的命名空间中
using namespace std;就可以直接使用。
关于#include< iostream >和"iostream.h"的区别
首先,< > 和 " " 包含头文件的本质区别是查找策略区别。
① " " 的查找策略:先在源文件所在的目录下查找。如果该头文件未找到,则在库函数的头文件目录下查找
② < > 的查找策略:直接去标准路径下去查找。
新的c++摈弃了.h形式的头文件。现在是标准c的头文件是.h,标准c++头文件不带.h。
所以 iostream 推荐用<>;
2.流插入运算符
cout 标准输出(控制台)和 cin 标准输入(键盘)时,必须包含 头文件。
并且需要使用 std 标准命名空间,这里我们下面会详细探讨。
cout<<a<<" "<<endl;
**cout 后面的 << ,我们称之为 “流插入运算符” 。**就像水流的流向一样,可以自动识别变量类型。
endl与\n的作用一样,endl会刷新缓冲区,增加输入输出。
所以大量输入输出可以用\n代替。
3.流提取运算符
cin 后面的 >> ,我们称之为 “流提取运算符”
如果我们想打印某个浮点数,如何控制小数点后的位数呢?在 C++ 的输入中,这是一件比较麻烦的事情。如果想控制小数点的位数,我们完全可以使用C语言的输入
printf("%.2f",n);