C++中的关键字
关键字是系统预留的、具有特殊意义的单词,一般不允许用户作为变量名来使用,常见的关键字除如if、else、int 、char 等熟悉的单词之外,还有一些不常见,但在我们深入学习时会经常遇到,在这里也整理一下。
1.asm内嵌汇编
asm允许用户在编程时给代码中直接加入汇编语言,将汇编语言写入__asm后的大括号中即可。
__asm{
int 3; //触发一个断点
}
2.typedef定义类型
- typedef在使用时多用于指定的类型起一个别名,为了书写方便并增加代码的可读性,但需要注意的是typedef并不等同于简单的字符替换,而是真正意义上的定义一个新的类型。
例如当我们使用char *p1,p2
时,定义的p2是char类型而不是char *型,想要达到我们想要的结果需要char *p1,*p2
这样书写,但我们使用typedef重定义这个数据类型时:
typedef char* pCHAR
再使用pCHAR p1,p2
定义的两个变量类型均为字符型指针。
3.auto自动
(1) 这个关键字在C和C++中有着明显的区别,在C中每一个变量不特别说明其类型(这里的类型指的是静态(static)、外部类型变量(extern)等)时均为auto类型,且使用auto a;
这样的方式定义变量也是正确的,没有为a赋初值,也没有说明具体的数据类型(int、char等)时默认为int型。
(2) 在C++中,auto类型定义的变量必须赋初值或初始表达式,因为C++中的auto类型是编译器根据表达式中变量的类型来确定定义变量的类型,例如auto x=1.1f
为x赋了初始值编译器会按照值1.1f确定x的类型为float,但auto x;
这样的定义是错误的,既没有定义变量的类型也没有为变量赋初值。
4.inline内联
在定义函数前加上 inline关键字表示这个函数为内联函数,内联函数解决的是大量掉用小函数而开辟栈帧造成的空间浪费,当一个函数被设置为内联函数时,再次调用将不会为这个函数开辟栈帧,而是直接替换的方式执行,常见的小操作例如判断奇偶数、是否是X的倍数等简单的操作在执行时都会直接被替换。
需要注意的是inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。
所以在实验的时候发现不论写不写inline都会正常的压参开辟新的栈帧。
5.typeid类型
返回这个变量的类型名称,使用type(i).name()获取变量类型
6.struct结构体
struct结构体用来将几个同时需要发送的多数据类型变量打包,方便维护大型的结构而造成代码的晦涩,在struct中会为其中的每一个变量分配各自的空间,一般定义为:
struct STUDENT
{
int Snumb;
char Sname[100];
double Ssorce;
}st;
这个结构体的名称为struct 后的,而st是直接在这个结构体后定义的一个变量,可以直接使用。
定义变量可以省略,在C++中之后需要使用的时候可以省略struct直接使用STUDENT a,b,c;
就可以直接使用(C语言中必须加上struct)。
而结构体名的省略一般在函数中出现,也不会影响他发挥作用。
当typedef与struct一起出现时是为新定义的结构体取别名,例如:
typedef struct POINT
{
int x;
int y;
}Pp; 别名,还需要定义变量
Pp p1;
7.union共用体
union与struct一样都定义了一个含有多个数据类型的组合,但union在使用时为了缩减空间让所有的成员公用一个空间,这个空间的大小由最大的成员大小所决定。
其用法与struct相同,也可以省略变量名。
union STUDENT
{
int Snumb;
char Sname[100];
double Ssorce;
}st;
此时union共用体所占的空间大小就是char类型数组的大小,100Byte。
8.enum枚举类型
表示此类型的变量只能取范围内的值,比如颜色种类有限,或者星期几这样的变量。
enum pColor
{
red,
green,
bule
};
pColor Col = bule;
但枚举类型的成员从0开始赋值,依次累加,所以当输出Col时结果为1。
9.static变量
static限定词的主要作用是用来隐藏变量或函数,使当前文件中的不被其他文件所使用,而不加限定时定义的变量均为全局可见,这个特点可以在不同的文件中通过static修饰而不用受同名变量限制。
且static在修饰变量的时候可以保证变量只会初始化一次,同全局变量一起存放在静态变量存储区,例如在一个函数中定义了一个static int x=100;
则他的生存周期是整个源程序,不论之后调用了多少次函数,都不会再次初始化这个变量x(功能相当于全局,但是对其他文件隐藏)。
10.捕捉异常处理关键字try、catch、throw
在使用他们时,通常try标记可能出现异常的代码段,使用throw抛出异常,catch捕获这个异常并按照需要将其处理。
try
{
throw XXX;
//可能异常代码片段
}
catch(...)
{
std::cout << "!!!";
}
需要注意的是在catch中可以确定需要捕获的异常的数据类型,当使用...
时表示捕获所有数据类型的异常。
11.namespace命名空间
namespace定义一个命名空间,将指定的一些变量放进这个命名空间中与其他的实体分开。
例如
namespace ns1
{
char a;
int b;
}
虽然这样的定义不会影响变量的性质,仅仅是把他们放入命名好的空间中,但使用它们的时候必须限定命名空间,ns1::a这样的使用方式。在变量很多的时候这样可以在不同的命名空间中使用同名变量,使用时加上空间的限定。
------续
很多的关键字还是需要对C++更加了解才能摸清楚,先去熟悉熟悉C++叭。
网友评论