const 什麼時候為唯讀變數?什麼時候為常量?
在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。
#include /**
* 使用常量初始化 const 引用,得到唯讀變數,進入符號表
*/void code_1()
/** * 被 volatile 修飾的 const 識別符號仍為唯讀變數,不會進入符號表
*/void code_2()
/** * 使用變數初始化的 const 識別符號仍為唯讀變數,不會進入符號表
*/void code_3()
/** * const 引用的型別與初始化變數型別不同那個,得到乙個新的唯讀變數
*/void code_4()
int main()
輸出:
x = 1
rx = 5
nrx = 5
&x = 0xbfaf2cac
&rx = 0xbfaf2cac
&nrx = 0xbfaf2cac
--------
y = 6
p = 0xbfaf2cac
--------
z = 7
p = 0xbfaf2ca8
--------
c = a
rc = a
trc = c
引用與指標有什麼關係? 如何理解」引用的本質就是指標常量「?
引用只是乙個變數的新名字
從 c++ 編譯器的角度來看
下面的**有問題嗎?
int a = 1;
int b = 2;
int* pc = new int(3);
int& array = ;
test_1.cpp
#include int a = 1; // 全域性資料區
struct sv
;int main()
; 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;
}
輸出:
&sv.x = 0x804a020
&sv.y = 0xbf91ef4c
&sv.z = 0x873d008
test_2.cpp
#include int a = 1; // 全域性資料區
int main()
; delete pc;
return 0;
}
輸出:
in function 『int main()』:
error: declaration of 『array』 as array of references
c++ 中為什麼不支援引用陣列呢?
c 陣列是記憶體中的一塊連續的儲存空間,每個元素在記憶體順序相鄰存放,c++需要遵守並支援。當陣列中的每個元素為引用即引用陣列,破壞了這一特性。
第12課 經典問題解析一
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 const 什麼時候為 唯讀變數?什麼時候是常量?const 常量的判別準則 在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。const 引用的型別與初始化變數的型別 程式設計實驗 const典型問題分析...
第12課 經典問題解析一
const 什麼時候為唯讀變數?什麼時候為常量?1.1 const常量的判別標準 1 只有用字面量初始化的 const 常量才會進入符號表,如 const int i 0 工作在程式的編譯時期,可以確認初始值為0 2 使用其它變數初始化的 const 常量仍然是唯讀變數,如 const int i ...
lessons 12 經典問題解析
1 只有用字面量初始化的const常量才會進入符號表,是真正意義上的常量,例如 const int a 2 a是真正意義上的常量 2 使用其他變數初始化的const常量任然是唯讀變數,例如 int x 1 const int y x y是唯讀變數 3 被volatitle volatile告訴編譯器...