• C++ 关键字


    bool

    取值

    true和false,只有二者,C++编译器会在赋值时将非0值转换为true,0转换为false

    ture

    代表真值,编译器内部用1来表示

    false

    代表非真值,编译器内部用0来表示

    空间

    占用一个字节

    多个bool变量定义在一起,可能会各占一个bit,取决于编译器的实现

    const

    #include

    int main(void)

    { //const 定义常量--->const 意味只读

    const int a;

    int const b;//第一个第二个意思一样 代表一个常整形数

    const int *c;//常量指针,常量的指针,指向常量的指针 第三个 c是一个指向常整形数的指针

    (所指向的内存数据不能被修改,但是本身可以修改)

    *c是常量,是右值

    c的指向可以随意改变,但是所指向的内容不能通过c改变,本身存储的地址可以改变,但是地址里面的数据不可以被改变,即不可以根据解引用改变

    int * const d;//指针常量,指针的常量,指针本身就是一个常量,是指针,也同时也是一个常量

    第四个 d 常指针

    (指针变量不能被修改,但是它所指向内存空间中的数据可以被修改)

    指针的指向一旦确定,就不能改变,本身存储的地址不可以改变,但是地址里面的数据可以改变,可以通过d来改变,即可以通过解引用改变

    const int * const e;//第五个 e一个指向常整形的常指针 (指针和它所指向的内存空间 ,均不能被修改)

    return 0;

    }

    顶层 const

    表示指针本身就是一个常量,它的指向不能改变,但是指向的对象的值可以改变。

    int *const a;

    可以表示任意的对象是常量,对任何数据类型均适用。

    底层 const

    表示指针所指的对象是一个常量,它的指向可以改变,但是不能通过解引用改变对象的值。

    const int *b;

    与指针、引用等复合类型的基本类型部分有关。

    特殊的是,指针既可以是顶层 const ,也可是底层 const 。

    用于声明引用的 const 都是底层 const 。

    拷贝

    顶层 const 不会对拷贝有影响,因为执行拷贝操作不会改变被拷贝对象的值,所以拷入和拷出的对象是否是常量没有影响。

    底层 const 会对拷贝产生影响,执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层 const 资格,或者两个对象的数据类型必须能够转换,一般来说,非常量可以换成常量,反之不行。

    合理的利用const的好处

    1.指针做函数参数,可以有效的提高代码可读性,减少bug;

    2.清楚的分清参数的输入和输出特性

    int setTeacher_err(const Teacher*p)

    const修改形参的时候,在利用形参不能修改指针所向的内存空间。

    const和#define的异同

    #include

    #define N 10

    int main()

    {

    const int a=1;

    const int b=2;

    int array[a+b]={0};

    int i=0;

    for(i=0;i<(a+b);i++)

    {

    printf("array[%d]=%d\n",i,array[i]);

    }

    return 0;

    }

    C++中的cconst修饰的,是一个真正的常量,而不是C中变量(只读)。在const修饰的常量编译期间,就已经确定下来了。

    #include

    void fun1()

    {

    #define a 10

    const int b=20;

    }

    void fun2()

    {

    printf("a=%d\n",a);

    //printf("b=%d\n",b);

    }

    int main()

    {

    fun1();

    fun2();

    return 0;

    }

    C++中的const常量类似于宏定义

    const int c=5; #define c 5

    C++中的const常量与宏定义不同

    const常量是由编译器处理的,提供类型检查和作用域检查宏定义由预处理器处理,单纯的文本替换

    宏定义在预处理阶段执行

    C

    const变量是只读变量,有自己的存储空间

    C++

    可以分配存储空间,也可能不分配存储空间

    当const常量为全局,并且需要在其它文件中使用,会分配存储空间

    当使用&操作符,取const常量的地址时,会分配存储空间

    当const int &a=10;const修饰引用时,也会分配存储空间

    常量表达式

    指值不会改变并且在编译过程中就能得到计算结果的表达式【字面值、用常量表达式初始化的 const 对象】。

    constexpr 变量

    将变量声明为 constexpr 类型,该变量一定是一个变量,并且必须用变量表达式初始化。

    普通函数不能作为 constexpr 变量的初始值,constexpr 函数可以,该函数应该足够简单使得编译时就可计算出结果。

    字面值类型

    比较简单,值显而易见、容易得到的类型被称为字面值类型。包括算术类型、引用和指针。

    虽然指针和引用都能定义成 constexpr ,但是初始值受到严格限制,constexpr 指针的初始值必须是 nullptr 或 0 ,或是存储于某个固定地址中的对象。

    函数体内定义的变量一般并非存放在固定的地址中,constexpr 不能指向这样的变量,定义于所有函数体之外的对象的地址固定不变,可初始化 constexpr 指针。允许函数定义一类有效范围超出函数本身的变量【静态局部变量】,该类变量和定义在函数体之外的变量一样有固定地址,constexpr 引用能绑定到这样的变量上,constexpr 指针也能指向这样的变量。

    constexpr 指针

    在 constexpr 声明中如果定义一个指针,限定符 constexpr 仅对指针有效,与指针所指的对象无关。

    const int *p = nullptr;//p 是一个指向整型常量的指针

    constexpr int *q = nullptr;//q 是一个指向整数的常量指针

    constexpr 把它所定义的对象置为顶层 const 。

    constexpr 指针既可指向一个常量,也可指向一个非常量。

  • 相关阅读:
    elasticsearch-spark的用法
    普元中间件Primeton AppServer6.5部署SuperMap iServer
    根据给定字符数和字符,打印输出“沙漏”和剩余数
    【前端Vue3】——JQuery知识点总结(超详细)
    MOSFET, MOS管, 开关管笔记
    AndroidStudio离线打包配置汇总
    EEG微状态预测并发fMRI动态功能连接状态
    多线程理论基础
    作为微软开发者官方号,我们又要做点特别的事情了
    飞阳物联平台,智能开关2.0版本支持凌动开关
  • 原文地址:https://blog.csdn.net/weixin_65951505/article/details/134068872