1. 程式人生 > >C++ const 理解

C++ const 理解

實踐 復雜 不能 spa 一個 不想 對象 函數 不可變

轉載自:https://www.cnblogs.com/jiabei521/p/3335676.html

如果函數需要傳入一個指針,面試官可能會問是否需要為該指針加上const,把const加在指針不同的位置有什麽區別;如果寫的函數需要傳入的參數是一個復雜類型的實例,面試官可能會問傳入值參數或者引用參數有什麽區別,什麽時候需要為傳入的引用參數加上const。 const是用來聲明一個常量的,當你不想讓一個值被改變時就用const,const int max和int const max 是沒有區別的,都可以。不涉及到指針const很好理解。一旦涉及到指針,則比較容易出問題。

技術分享圖片

如果const位於星號的左側,則const就是用來修飾指針所指向的變量,即指針指向的對象為常量

;如果const位於星號的右側,const就是修飾指針本身,即指針本身是常量

因此,[1]和[2]的情況相同,都是指針所指向的內容為常量(const放在變量聲明符的位置無關),這種情況下不允許對內容進行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的,但是*a=3 是允許的;[4]為指針本身和指向的內容均為常量。

實踐

int b = 100; 
    const int *a1 = &b; //[1] 與[2]相同 指針指向的對象為常量
    int const *a2 = &b;    //
[2] int* const a3 = &b; //[3] 指針本身是常量 const int* const a4 = &b; //[4] 指針本身和指向的內容均為常量 *a1 = 100; //錯誤,指針指向的對象為常量,不可變更 *a3 = 100; //正確,指針本身是常量,可以更改指針指向的內容 (*a3)++; //正確,指針本身是常量,不可更改 a3++; //錯誤,指針本身是常量,不可更改 *a3++; //錯誤,同上 *a4 = 100; //錯誤 a4++;//
錯誤 *a4++;//錯誤 (*a4)++;//錯誤

技術分享圖片

C++ const 理解