欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

12-经典问题分析一-const和引用的疑问

程序员文章站 2022-03-26 12:33:46
...

1、关于const的疑问

12-经典问题分析一-const和引用的疑问

2、

12-经典问题分析一-const和引用的疑问

3、

12-经典问题分析一-const和引用的疑问

#include <stdio.h>

int main()
{
    const int x = 1;      //const 常量 x,用字面量初始化的,存在字符号表中,x分配的空间未使用
    const int& rx = x;    //只读变量rx,rx为编译器为x常量所分配未使用的空间,这时候rx代表一个只读变量

    int& nrx = const_cast<int&>(rx);//消除rx的只读变量的只读属性,得到一个普通变量 nrx,nrx为rx空间的引用

    nrx = 5;

    printf("x = %d\n", x);
    printf("rx = %d\n", rx);
    printf("nrx = %d\n", nrx);
    printf("&x = %p\n", &x);
    printf("&rx = %p\n", &rx);
    printf("&nrx = %p\n", &nrx);

    volatile const int y = 2;//y是只读变量
    int* p = const_cast<int*>(&y);//去除y地址的只读属性

    *p = 6;   //y被修改

    printf("y = %d\n", y);
    printf("p = %p\n", p);

    const int z = y;//创建一个只读变量z用y赋值,

    p = const_cast<int*>(&z);//去除只读属性

    *p = 7;      //修改z的值

    printf("z = %d\n", z);
    printf("p = %p\n", p);

    char c = 'c';
    char& rc = c;
    const int& trc = c;//const初始化类型不同,则创建为新的只读变量trc 为int,c为 char 类型,所以trc = 'c'

    rc = 'a';

    printf("c = %c\n", c);
    printf("rc = %c\n", rc);
    printf("trc = %c\n", trc);

    return 0;
}
结果:
x = 1
rx = 5
nrx = 5
&x = 0x7ffe89359240
&rx = 0x7ffe89359240
&nrx = 0x7ffe89359240
y = 6
p = 0x7ffe89359244
z = 7
p = 0x7ffe89359248
c = a
rc = a
trc = c

4、关于引用的疑问

12-经典问题分析一-const和引用的疑问

5、引用的本质是常量指针

12-经典问题分析一-const和引用的疑问

6、

12-经典问题分析一-const和引用的疑问

7、小结

12-经典问题分析一-const和引用的疑问