非指標型別
const
int c_a =10;
int b =20;
b = c_a ;
// 正確
c_a = b;
// error!
關於這個問題,網上有說」非const變數賦給const變數,是非法的「。請不要陷入這種容易混亂的邏輯。
上述情況,比較正確的解釋。const int 在初始化之後,是不能再改變的。且const int 必須在宣告時就賦值。
// error
const
int c_a;
c_a =
10;
指標型別const
int* c_ptra =
newint(10
);int* ptrb=
newint(10
);c_ptra = ptrb;
// 沒問題
ptrb = c_ptra;
// 編譯報錯 不能從 const int* 轉換程 int*
// 下面這種情況不會報錯,但可能造成程式崩潰
ptrb =
(int
*)c_ptra;
// ....
*ptrb =20;
// 此處修改了b和a共同指向的位址的內容,程式崩潰
const int * 表示,指向常量int 型別的指標,即指向的這塊記憶體的內容,不可以修改。(但指標本身可以修改)。
int * 表示,指向非常量int型別的指標,指標這塊記憶體的內容可修改,指標本身可修改。
const int* 已經限制此位址內容,不可修改。這時,卻讓 int * 指標指向這塊位址,而使用 int * 指標,表示此位址內容可修改。那麼到底可不可以改?
接上,因此邏輯衝突,編譯器報錯。
// 正確
const
int* c_a;
// ...
c_a = someaddress;
const與非const型別賦值問題
const與非const型別賦值問題 以前總有個問題想不通,就是為什麼從const char到char的賦值就會出錯,而const int到int的賦值就沒問題呢?呵呵,不知道有沒有其他新手和我有相同的疑問呢?還算我運氣好,今天不知道怎麼會觸發了靈感,終於把這個小白問題想通了。答案就是 從const...
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...