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;
}
相關文章
相關標籤/搜索