首页 > 代码库 > C++ const 限定符

C++ const 限定符

#include<stdlib.h>
#include<iostream>
int MAX(const int a, const int b);

/*
*    const限定符:
*    1. 定义:限定一个变量不允许被改变,产生静态作用
*    2. 分类:
*        (1)    顶层const:限定变量本身不可改变
*            例:    const int number;
*                int *const pointer;
*
*        (2)    底层const:限定变量所指向的对象不可改变,所有的引用都是底层const
*            例:    const int *pointer;
*                const int &quotation;
*    3. 用法:
*        (1)    定义常量
*
*        (2)    保护被修饰的东西
*
*        (3)    很方便的进行参数的调整和修改
*
*        (4)    为函数重载提供了一个参考    (***)
*
*        (5)    节省空间,避免不必要的内存分配
*            const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝
*
*        (6)    提高效率
*            编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
*/

int main()
{
    /*
    *    1. 定义:限定一个变量不允许被改变,产生静态作用
    *    2. 分类:
    *        (1)    顶层const:限定变量本身不可改变
    *        (2)    底层const:限定变量所指向的对象不可改变,所有的引用都是底层const
    */
    const int num_1 = 10;
    //num_1 = 20;    //错误:num_first 被const 修饰,不可改变

    const int *num_pointer_1 = &num_1;
    num_pointer_1 += 8;    //正确:底层const ,限定指针所指的变量不可变
    std::cout << num_pointer_1 << *num_pointer_1 << std::endl;

    const int &num_reference = num_1;
    //num_reference = 20;    //错误:使用const 修饰引用变量时,都是底层const

    std::cout << std::endl;
    std::cout << std::endl;

    /*
    *    3.用法:
    *        (2)    便于进行类型检查(与宏进行比较)
    */
    int num_3_1 = 12;
    int num_3_2 = 32;
    std::cout << "MAX(num_3_1, num_3_2) = " << MAX(num_3_1, num_3_2) << std::endl;

    std::cout << "MAX(NUM_DE_1, NUM_DE_1) = " << MAX(NUM_DE_1, NUM_DE_1) << std::endl;

    
}
int MAX(const int a, const int b)
{
    return a > b ? a : b;
}

 

C++ const 限定符