关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

再论C++中的const和引用(一)

2020.9.28

今天给大家分享一下这段时间学习c++的总结学习:c++里面的const关键字和引用。

一、const关键字的总结

1、const什么时候为只读变量,什么时候又是常量呢?

(1)const常量的判别规则:

只用字面量初始化的const常量才会进入符号表

使用其它变量初始化的const常量仍然是只读变量

被volatile修饰的const常量不会进入符号表

在编译期间不能直接确定初始值的const标识符,都被作为只读变量处理

(2)const引用的类型与初始化变量的类型

相同:初始化变量成为只读变量

不同:生成一个新的只读变量

代码版本一:

#include <stdio.h>
int main()

  const int x = 1;//直接得到值,进入符号表,但是还是会为 x 分配空间,只不过这个空间 x 没有用而已
  const int& rx = x;//rx代表只读变量,这个变量是编译器为x分配而没有使用的空间;引用代表变量的别名,而变量代表一段内存空间的别名,所以引用代表一段内存空间的别名
  int& nrx = const_cast<int&>(rx); //消除 rx只读属性,和rx 代表的内存空间相同,同时c++里面的几种类型转换要掌握
  nrx=5;
  printf("x = %d",x);
  printf("rx = %d",rx);
  printf("nrx = %d",nrx);
  printf("&x = %p",&x);
  printf("&rx = %p",&rx);
  printf("&nrx = %p",&nrx);
 
  return 0;

输出结果:

root@txp-virtual-machine:/home/txp# ./a.out
x = 1
rx = 5
nrx = 5
&x = 0x7ffcc5fa8abc
&rx = 0x7ffcc5fa8abc
&nrx = 0x7ffcc5fa8abc

代码版本二:

#include <stdio.h>
int main()

    volatile const int y = 2;// 只读变量,不会进入符号表
    int *p = const_cast<int*>(&y);//y被 const修饰,取到的地址也有 const 属性,这里将地址只读属性去掉
     *p = 8;
      printf("y = %d",y);
      printf("p = %p",p);
      return 0;


推荐
热点排行
一周推荐
关闭