c++ const问题

const
什么时候是只读变量,什么时候是常量
简单的说在编译期间不能确定值得const标识符都被当做是只读变量

/*只有用字面量初始化的才会进入符号表*/
const int a=;  //常量
int b=1;
const int c=b; //只读变量
//简单的说在编译期间不能确定值得const标识符都被当做是只读变量
volatile修饰的const常量不会进入符号表
#include <stdio.h>
int main(void)
{
	const int x = 1;		//常量x=1
	const int& rx = x;     //会产生一个只读属性的新变量
	int& nrx = const_cast<int&>(rx);//去除引用rx的只读属性

    nrx = 5;

    printf("x = %d\n", x);         // 1  常量
    //const引用会生成一个具有只读属性的变量
    printf("rx = %d\n", rx);       // 5    
    printf("nrx = %d\n", nrx);     // 5

    //引用只是变量的别名所以内存地址都是相同的,在这种情况下编译器会位const分配内存
    printf("&x = %p\n", &x);       //0000008C4E8FF694   
    printf("&rx = %p\n", &rx);     //0000008C4E8FF694
    printf("&nrx = %p\n", &nrx);   //0000008C4E8FF694

    /***************************************************************************************************/
    //volatile修饰的const常量不会进入符号表,所以一定是个只读变量
    volatile const int y = 2;
    int* p = const_cast<int*>(&y);   // 通过const_cast强制类型转换后y只是一个普通类型的指针变量
    *p = 6;                          //通过指针修改y的值

    printf("y = %d\n", y);  //6
    printf("p = %p\n", p);  //一个合法的地址
    /*************************************************************************************************/
    const int z = y;        //编译器不能直接知道y的值所以是只读变量  

    p = const_cast<int*>(&z);   //通过强制类型转换去除只读属性更改他的值说明确实是一个只读属性
    *p = 7;
    printf("z = %d\n", z);  //7
    printf("p = %p\n", p); //
    /*************************************************************************************************/
    char c = 'c';           //变量c  
    char& rc = c;           //引用
    const int& trc = c;     //只读属性的引用

    rc = 'a';

    printf("c = %c\n", c);     //a    c本身是个变量  
    printf("rc = %c\n", rc);   //a     
    printf("trc = %c\n", trc); //c   只读属性

    return 0;
}

引用数组
C++中,不支持引用数组,因为会使得相邻数组元素的地址之差,不是连续地址
引用数组破坏了C语言的特性,数组的每个元素都是彼此相邻的排放

const引用的初始化类型不同,将得到新的只读变量

    //不同类型的变量去初始化const标识符
    char c = 'c';
    char& rc = c; //引用rc代表变量c
    //const引用的初始化类型不同(c是char,而trc是int),将得到新的只读变量
    //trc代表一个只读变量
    const int& trc = c;//char类型默认转换为int类型
    //const char& trc = c;//未做类型转换还是打印a  这就说明了是产生了一个新的变量
    rc = 'a';
    printf("c = %c\n", c);     //a
    printf("rc = %c\n", rc);   //a
    printf("trc = %c\n", trc); //c  const引用的初始化类型不同,将得到新的只读变量!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值