发布时间:2020-09-28 23:17 原文链接: 再论C++中的const和引用(二)

输出结果:

root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffd78559684

代码版本三:

#include <stdio.h>
int main()

    volatile const int y = 2;
    int *p = const_cast<int*>(&y);
    *p = 8;
     printf("y = %d",y);
     printf("p = %p",p);
     const int z = y ;//只读变量
     p = const_cast<int*>(&z);
     *p= 9;
     printf("z = %d",z);
     printf("p = %p",p);
      return 0;

输出结果:

root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffc5d651250
z = 9
p = 0x7ffc5d651254

代码版本四:

#include <stdio.h>
int main()

    char c = 'c';
    char& rc = c;
    const int& trc = c; // char 类型默认转换为 int;const 引用初始化类型不同,将得到新的只读变量,所以改变 rc 和 trc 没有丝毫关系,从我们的输出结果可以看出来
    rc = 'a';
    printf("c = %c",c);
    printf("rc = %c",rc);
    printf("trc = %c",trc);
    return 0;

结果输出:

root@txp-virtual-machine:/home/txp# ./a.out
c = a
rc = a
trc = c

二、引用的总结:

1、引用与指针有什么关系,以及如何理解"引用的本质就是指针常量"?

(1)指针是一个常量:

值为一个内存地址,不需要初始化,可以保存不同的地址

通过指针可以访问对应内存地址中的值

指针可以被const修饰成为常量或者只读变量

(2)引用只是一个变量的新名字:

对引用的操作(赋值、取地址等)都会传递到代表的变量上

const引用使其代表的变量具有只读属性

引用必须在定义时初始化,之后无法代表其它变量

(3)从使用c++语言的角度来看:

引用与指针没有任何的关系

引用是变量的新名字,操作引用就是操作对应的变量

(4)从c++编译器的角度来看:

为了支持新概念"引用"必须要一个有效的解决方案

在编译器内部,使用指针常量来实现"引用"

因此"引用"在定义时必须初始化