const與非const型別賦值問題
以前總有個問題想不通,就是為什麼從const char到char的賦值就會出錯,而const int到int的賦值就沒問題呢?呵呵,不知道有沒有其他新手和我有相同的疑問呢?還算我運氣好,今天不知道怎麼會觸發了靈感,終於把這個小白問題想通了。答案就是:
從const int到int的賦值操作,是一種物件的拷貝,賦值後我們在物件的副本上操作當然不會有問題。 從const char到char的賦值操作,雖然也是一種物件的拷貝,不過我們拷貝的只是指標物件,而指標指向的物件卻是同乙份,這個物件在賦值前後的型別發生了變化,編譯器自然就會報錯。 另外從char* const到char*的賦值僅僅是指標物件的拷貝,而指標指向物件的型別相同,編譯器也不會報錯。
const與非const之間,相互賦值時,如果使用不當,可能造成一些問題。
非指標型別
const int c_a = 10;
int b = 20;
b = c_a ; // 正確
c_a = b; // error!
// error
const int c_a;
c_a = 10;
const int* c_ptra = new int(10);
int * ptrb= new int(10);
c_ptra = ptrb; // 沒問題
ptrb = c_ptra; // 編譯報錯 不能從 const int* 轉換程 int*
// 下面這種情況不會報錯,但可能造成程式崩潰
ptrb = (int*)c_ptra;
// ....
*ptrb = 20; // 此處修改了b和a共同指向的位址的內容,程式崩潰
// 正確
const int * c_a;
// ...
c_a = someaddress;
1.因此,對於非指標型別的const,可以理解為使用"const」,就是常量了。什麼是常量?10,20,「linduo"等都是常量。 int a、char s等都是變數。
2.對於指標型別,當然有常量指標和指標常量的區別。可以理解為,使用"const」,是用來限制,指標本身或指標指向內容,可不可以修改。
const與非const型別賦值問題
非指標型別const int c a 10 int b 20 b c a 正確 c a b error!關於這個問題,網上有說 非const變數賦給const變數,是非法的 請不要陷入這種容易混亂的邏輯。上述情況,比較正確的解釋。const int 在初始化之後,是不能再改變的。且const int...
const與非const型物件
一 非const物件可以初始化const物件 int i 0 const int ci i 因為它們使用各自的儲存單元。二 非const引用與const引用 1 const引用可以用常量 表示式 const物件或非const物件初始化 int i 0 const int refi i 儘管i與ref...
const引用與非const引用
const引用可讀不可改,與繫結物件是否為const無關,注意區分const引用與對const物件的引用 非const引用可讀可改,只可與非const物件繫結 const int ival 1024 const int refval ival ok both reference and object...