const 在類成員函式中的使用說明

2021-06-22 18:38:50 字數 1054 閱讀 5985

在類中宣告成員函式的時候, 當不允許成員函式修改到我們的物件的成員變數的時候, 常常會在函式的名的尾部加上const 關鍵字修飾。 這樣, 如果我們無意中在函式內部修改到了資料成員, 或者呼叫了其他的非const 函式的時候, 編譯器會報錯。例如:

#include using namespace std;

class temp

;temp::temp(int age)

int temp::getage() const

int main()

一般情況下, 當成員函式的返回值數給類物件的時候, 一般將該函式的返回型別用const 修飾(const 在函式名字之前), 以表示返回值是乙個const 的物件, 或者是某個物件的引用是const。多用於運算子的過載。通常,不建議用const修飾函式的返回值型別為某個物件或對某個物件引用的情況。 原因如下:  

如果返回值是某個物件為const或某個物件的引用為const   ,則返回值具有const屬性,則返回例項只能訪問類a中的公有(public)資料成員和const成員函式,並且不允許對其進行賦值操作,這在一般情況下很少用到。  例如, 有乙個class a, 成員函式宣告為:const a& a::f(const &a ) const; 第乙個const  修飾reference &的返回值。 也就是說返回值為const referece的object。 這是為了避免出現f(a)=b;的情況, 比如:

a a, b;

下面是錯誤的:

a.f(a)=b;//f函式返回a的引用,那這個就等價於a=b;既然如此,那不如直接寫a=b;

由於引數的傳遞方式是pass  by referecnce, 所以第二個const 是修飾引數的, 避免在函式內部修改了引數。

最後乙個const 是修飾呼叫這個函式的object。 也就是說不允許object 呼叫這個函式修改自己的資料成員。 note: 為啥要放在最後面呢? 原因是const已經吧前面兩個位置佔住了。由於 因為成員函式的引數表裡無法出現呼叫函式的對像本身,所以就只能加到函式後面了,用來修飾*this的,const物件也只能呼叫字尾是const的方法.。

const在類成員函式中的作用

程式通常不直接修改類物件。在必須修改類的物件時,應呼叫公有成員函式集來完成。為尊重類物件的常量性,編譯器必須區分不安全與安全的成員函式 即區分試圖修改類物件與不試圖修改類物件的函式 類的設計者通過把成員函式宣告為const,以表明它們不修改類物件。例如 class screen 只有被宣告為cons...

在類成員函式後面加const

在看開源 時,經常會看到在類的成員函式後面加const,之前了沒有太關注過,近來閒來無事,就想起這件事,網上查了一下,大概明白了是怎麼回事,這裡引用csdn愽文裡的段話 編譯器會自動給每乙個函式加乙個this指標。在乙個類的函式後面加上const後,就表明這個函式是不能改變類的成員變數的 加了mut...

在const和非const成員函式中避免重複

的重複會導致編譯時間,維護,膨脹等令人頭痛的問題,當讓我們把其中一部分共有的操作移動到乙個private型別的函式中,並且在兩個函式中分別呼叫它,是可以解決以上的問題的,但是還是重複了部分的 考慮以下 class textblock public const char operatpr size t...