美文网首页
C++基础(关键字一)

C++基础(关键字一)

作者: 星辰照耀你我 | 来源:发表于2019-10-17 20:51 被阅读0次

    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++叭。

    相关文章

      网友评论

          本文标题:C++基础(关键字一)

          本文链接:https://www.haomeiwen.com/subject/jmshmctx.html