HOWTO · C++

C++ 中的 const 成員函式

一篇關於在 C++ 中使用 const 成員函式的文章。

本文是關於 C++ 中常量成員函式的使用。我們使用關鍵字 const 使任何物件、變數或函式成為常量。

像任何其他變數或物件一樣,類的成員函式也可以設為 const。本文將討論此類函式的某些規則和規定。

C++ 中的 Const 成員函式

Const 是一個型別限定符,一個與資料型別一起使用的關鍵字,表示資料是隻讀的。雖然它可以用於宣告常量,但 Const 與其他語言中的類似結構不同,因為它是型別的一部分,因此在與指標、引用、複合資料型別和型別檢查配對時具有複雜的行為。

Const 成員函式在程式中被宣告為常量。這些函式引用的物件不能更改。

建議使用 const 關鍵字來避免無意更改物件。任何物件都可以呼叫 const 成員函式。

只有 non-const 物件可以呼叫 non-const 函式。如果我們將類的物件宣告為 const 物件,它只能呼叫 const 成員函式,而 non-const 物件可以呼叫所有成員函式 constnon-const

建立 const 函式的語法是:

return -datatype function_name() const;

參考下面的例子。

#include <iostream>
using namespace std;
class Data {
  int val;

 public:
  Data(int a = 0) { val = a; }
  int getValue() const { return val; }
};
int main() {
  Data d(10);
  cout << d.getValue();
  return 0;
}

我們在此程式碼段中宣告瞭一個具有建構函式和成員函式 getValue() 的類 Data。這個函式是一個 const 函式,因此它不能改變資料成員的值。

如果它修改了任何資料成員的資料,編譯器將產生錯誤。此函式中的 this 指標是指向提供給 const 成員函式的 const 物件的指標。

這確保了指標不能用於修改物件的資料成員。任何修改被稱為常量方法的物件的資料成員的任何嘗試以及為該物件呼叫非常量成員函式的任何嘗試都將導致語法錯誤。

常量成員函式可以過載非常量版本。編譯器根據是由 const 物件還是 non-const 物件呼叫來確定要使用的版本。

Const 建構函式和解構函式永遠不能被宣告。即使物件本身是常量,它們也可以隨時更改資料成員。

靜態成員函式不能定義為 constconst 關鍵字影響提供給成員函式的 this 指標引用,但靜態成員函式沒有,因為它們可以在沒有物件的情況下呼叫。

也可以放寬防止函式寫入任何類變數的 const 函式限制。這些類變數用 mutable 關鍵字標記,以使它們即使在函式被標記為 const 函式時也是可寫的。

如果一個類變數被標記為 mutable 並且 const 函式寫入它,程式碼將正確編譯,並且可以更改變數 (C++11)。

在 C++ 語句中更改 const 關鍵字的位置具有完全不同的語義,這在使用 const 關鍵字時很典型。前面的 const 用法僅適用於將 const 放在括號後面的函式宣告的末尾時。