首页 » C++ » C++中的const变量和引用

C++中的const变量和引用

原文 http://blog.csdn.net/qq_18824491/article/details/78916878

2017-12-28 02:01:04阅读(532)

一、只有用字面量初始化的const常量才会进入常量符号表:
1、对const常量取引用,会导致编译器为其分配内存空间;
2、虽然编译器为其分配了内存空间,但是这个空间中的值不会被使用,还是会去使用常量符号表中的值;
3、使用其他变量初始化的const常量仍然是只读变量,不会进入常量符号表;
代码如下:

int main(void) {
    const int x = 0;//字面量初始化的const常量才会进入常量符号表
    int& rx = const_cast<int&>(x);//对const常量取引用,会导致编译器为其分配内存空间
    rx = 6;
    int y = 1;
    const int z = y;//使用其他变量初始化的const常量仍然是只读变量
    int* p = (int*)&z;
    *p = 9;
    printf("x = %d\n", x);//虽然编译器为其分配了内存空间,但是这个空间中的值不会被使用,还是会去使用常量符号表中的值
    printf("rx = %d\n", rx);
    printf("&x = %p\n", &x);
    printf("&rx = %p\n", &rx);
    printf("z = %d\n", z);
    cout << endl;
    printf("Press Enter Key to Continue... ...");
    getchar();
    return 0;
}

执行结果如下图:
C++中的const变量和引用

二、被volatile修饰的const常量不会进入常量符号表,而是退化为只读变量,每次访问都从内存中取值:
代码如下:

int main(void) {
    volatile const int y = 2;//使用volatile,导致y未进入常量符号表 ,而是进入内存空间;
    int* p = const_cast<int*>(&y);
    *p = 9;
    printf("y = %d\n", y);
    printf("*p = %d\n", *p);
    printf("&y = %p\n", &y);
    printf("p = %p\n", p);
    printf("Press Enter Key to Continue... ...");
    getchar();
    return 0;
}

代码执行结果如下:
C++中的const变量和引用

三、const引用的类型与初始化变量的类型:
相同:使初始化变量成为只读变量;
不同:生成一个新的只读变量,其初始值与初始化变量相同;
代码如下:

int main(void) {
    char c = 'c';
    char& rc = c;
    const int& trc = c;//const引用的类型与初始化变量的类型不同,这里将在一块新的内存地址产生一个新的只读变量;
    int* ptr = (int*)&trc;
    rc = 'g';
    *ptr = 'k';
    printf("c = %c\n", c);
    printf("rc = %c\n", rc);
    printf("trc = %c\n", trc);
    printf("&c = %p\n", &c);
    printf("&rc = %p\n", &rc);
    printf("&trc = %p\n", &trc);
    printf("Press Enter Key to Continue... ...");
    getchar();
    return 0;
}

代码执行结果如下:
C++中的const变量和引用

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹