lessons 12 經典問題解析

2021-08-14 21:24:07 字數 2787 閱讀 2432

(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 ...