#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 "ation; * 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; }