C 中const限定符常見問題分析

2021-08-01 19:49:15 字數 1487 閱讀 6659

1.const變數不在類中時:const變數必須在定義的同時進行初始化。這是因為const限定符使變數「成為」常量,無法進行賦值操作。

2.const變數在類中時:const變數要在建構函式的初始化列表中進行初始化或在定義處進行初始化。

3.乙個特殊情況:類中的const static/static const變數。static變數不允許在類中初始化,但是const static變數可以在類中初始化。const static 變數在類中初始化的方式與const不同,如下**:

#include "iostream"

using namespace std;

class test

編譯時:error: invalid initialization of non-const reference of type 『int&』 from an rvalue of type 『int』

int &temp1=1000; //錯誤

^const.cpp:8:13: error: invalid initialization of non-const reference of type 『int&』 from an rvalue of type 『int』

int &te***=var1;//錯誤

1.指向const變數的指標與指向變數的const指標

const type *p:指向const變數的指標 (指標的指向可變,被指變數不可變)

type* const p:指向變數的const指標 (指標的指向不可變,被指變數為可變數)

2.指向const變數的指標的賦值物件

注意:可以將非const變數的位址賦值給指向const變數的指標,這樣做並不會引起不合法的操作,只是不能通過該指標修改變數的值(因為指標認為自己指向的是乙個const變數);但是,並不能將const變數的位址賦值給不指向const變數的指標,因為該指標認為自己可以修改變數的值,但是const變數不可被修改,這樣便引起了非法操作。

首先要理解類中成員函式的this指標。類中的成員函式(不包括static函式)都具有乙個隱含的指標形參——this指標。它的作用是將成員函式與呼叫它的例項物件進行繫結。比如在類中有變數int a,在寫成員函式時可以直接使用。那麼在呼叫成員函式時,正是通過this指標將呼叫該函式的物件與該函式繫結,函式才知道使用哪個物件的a。

而用const對成員函式進行修飾,實質上是用const對成員函式的this指標進行修飾,這樣this認為自己指向乙個const物件,也就不能修改該物件的值。由於類中的非const函式可能對物件的變數進行修改,因此不能在const函式中呼叫非const的成員函式。

從const是對函式this指標進行修飾,而static函式不存在this指標(static不能定義為虛函式),也可以推斷出不能用const修飾static成員函式

const限定符是函式型別的乙個組成部分,因此能通過有無const進行函式過載

C 之const限定符

const的特點 用const加以限定的變數,無法改變。由於const物件定義之後就無法改變,所以必須對其進行初始化。const物件的常量特徵僅在嘗試改變它的時候表現出來,其他時候和變數無異。const初始化 const int bufsize 512 bufsize無法再改變const物件通常只在...

C 的const限定符

const限定符總是讓人很頭疼,下面講解一下幾個比較容易混淆的概念 對常量的引用 常量引用 一般情況下,引用的型別要與其所引用的物件的型別一致,其中的例外情況就是,當初始化常量引用時,允許用任意表示式作為初始值,只要改表示式能轉換成引用的型別即可。const int i 1 const int ri...

C 的const限定符

一 const常量 const int a 123 編譯時初始化 const int a get size 執行時初始化 a 111 錯誤,a是常量物件,不能改變了 const int b 錯誤 二 對const和const引用的初始化 初始化常量或常量引用時允許用任意表示式作為初始值,只要該表示式...