(1)只有用字面量初始化的const常量才會進入符號表,是真正意義上的常量,例如:const int a = 2; // a是真正意義上的常量
(2)使用其他變數初始化的const常量任然是唯讀變數,例如:
int x = 1;
const
int y = x; // y是唯讀變數
(3)被volatitle(volatile告訴編譯器所修飾的變數是隨時可能發生變化的)修飾的const常量不會進入符號表,它僅僅告訴編譯器該const常量不能出現在賦值號的左邊
(4)在編譯期間不能直接確定初始值的const識別符號,都被作為唯讀變數處理
(1)型別相同:初始化變數成為唯讀變數
(2)型別不同:生成乙個新的唯讀變數
示例:
const
int x = 1; //const常量x
const
int& rx = x; //rx是唯讀變數
int& nrx = const_cast
(rx); //去除rx的唯讀屬性,nrx成為普通變數
nrx = 5;
printf("x = %d\n", x);
printf("rx = %d\n", rx);
printf("nrx = %d\n", nrx);
printf("&x = %p\n", &x);
printf("&rx = %p\n", &rx);
printf("&nrx = %p\n", &nrx);
volatile
const
int y = 2;
int* p = const_cast
(&y);
*p = 6;
printf("y = %d\n", y);
printf("*p = %d\n", *p);
printf("p = %p\n", p);
const
int z = y;
p = const_cast
(&z);
*p = 7;
printf("z = %d\n", z);
printf("*p = %d\n", *p);
printf("p = %p\n", p);
char c = 'c';
char& rc = c;
const
int& trc = c; //型別不同,trc成為乙個新的唯讀變數,
//改變了rc跟trc沒有半毛錢關係
rc = 'a';
printf("c = %c\n", c);
printf("rc = %c\n", rc);
printf("trc = %c\n", trc);
編譯結果:
本質:(1)指標是乙個變數
①指標的值是乙個記憶體位址,不需要初始化,可以儲存不同的位址
②通過指標可以訪問對應記憶體位址中的值
③指標可以被const修飾成為常量或者唯讀變數
(2)引用只是乙個變數的新名字
①對引用的操作(賦值,取位址等)都會傳遞到代表的變數上
②const引用使其代表的變數有唯讀屬性
③引用必須在定義時初始化,之後無法代表其他變數
(1)從使用c++語言的角度看
①引用與指標沒有任何關係
②引用是變數的新名字,操作引用就是操作對應的變數
(2)從c++編譯器角度看
①為了支援新概念,「引用」必須要乙個有效的解決方案
②在編譯器內部,使用指標常量來實現
③「引用」在定義時必須初始化
(3)在專案開發中
①進行c++**程式設計時,直接站在使用的角度看待引用,與指標毫無關係,引用就是變數的別名
②進行c++**除錯分析時,可以焦慮站在c++編譯器的角度看待問題
例如:
#include
int a = 1;
struct sv
;int main()
; int& array = ; // &array[1] - &array[0] = ?
printf("&sv.x = %p\n", &sv.x);
printf("&sv.y = %p\n", &sv.y);
printf("&sv.z = %p\n", &sv.z);
delete pc;
//看上面這段**,引用初始化結構體變數是正確的,那麼初始化引用陣列也應該正確的
//但是從編譯器的角度看,陣列的位址空間應該相鄰固定空間大小,但是引用陣列的位址空間是不相鄰的
return
0;}
編譯結果:
結論:c++不支援引用陣列,要牢記!!!
C 12 經典問題解析 一
const 什麼時候為唯讀變數?什麼時候為常量?在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。include 使用常量初始化 const 引用,得到唯讀變數,進入符號表 void code 1 被 volatile 修飾的 const 識別符號仍為唯讀變數,不會進入符號...
第12課 經典問題解析一
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 const 什麼時候為 唯讀變數?什麼時候是常量?const 常量的判別準則 在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。const 引用的型別與初始化變數的型別 程式設計實驗 const典型問題分析...
第12課 經典問題解析一
const 什麼時候為唯讀變數?什麼時候為常量?1.1 const常量的判別標準 1 只有用字面量初始化的 const 常量才會進入符號表,如 const int i 0 工作在程式的編譯時期,可以確認初始值為0 2 使用其它變數初始化的 const 常量仍然是唯讀變數,如 const int i ...