共用方式為


const (C++)

在修改資料宣告時,const 關鍵字指定物件或變數是不可修改的。

語法

declarator
ptr-declarator
noptr-declarator parameters-and-qualifiers trailing-return-type
ptr-declarator
noptr-declarator
ptr-operator ptr-declarator
noptr-declarator
declarator-id attribute-specifier-seqopt
noptr-declarator parameters-and-qualifiers
noptr-declarator [ constant-expressionopt ] attribute-specifier-seqopt
( ptr-declarator )
parameters-and-qualifiers
( parameter-declaration-clause ) cv-qualifier-seqopt
ref-qualifieropt noexcept-specifieropt attribute-specifier-seqopt
trailing-return-type
-> type-id
ptr-operator
* attribute-specifier-seqopt cv-qualifier-seqopt
& attribute-specifier-seqopt
&& attribute-specifier-seqopt
nested-name-specifier * attribute-specifier-seqopt cv-qualifier-seqopt
cv-qualifier-seq
cv-qualifier cv-qualifier-seqopt
cv-qualifier
const
volatile
ref-qualifier
&
&&
declarator-id
...opt id-expression

const

const 關鍵字指定變數值為常數,並告知編譯器禁止程式設計人員修改該值。

// constant_values1.cpp
int main() {
   const int i = 5;
   i = 10;   // C3892
   i++;   // C2105
}

在 C++ 中,您可以使用 const 關鍵字取代 #define 前置處理器指示詞來定義常數值。 以 const 定義的值必須接受類型檢查,並且可以取代常數運算式。 在 C++ 中,您可以使用 const 變數指定陣列的大小,如下所示:

// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray];  // allowed in C++; not allowed in C

在 C 中,常數值預設為外部連結,因此只能出現在原始程式檔中。 在 C++ 中,常數值預設為內部連結,所以可以出現在標頭檔中。

const 關鍵字也可以用於指標宣告中。

// constant_values3.cpp
int main() {
   char this_char{'a'}, that_char{'b'};
   char *mybuf = &this_char, *yourbuf = &that_char;
   char *const aptr = mybuf;
   *aptr = 'c';   // OK
   aptr = yourbuf;   // C3892
}

宣告為 const 之變數的指標只能指派給同樣宣告為const 的指標。

// constant_values4.cpp
#include <stdio.h>
int main() {
   const char *mybuf = "test";
   char *yourbuf = "test2";
   printf_s("%s\n", mybuf);

   const char *bptr = mybuf;   // Pointer to constant data
   printf_s("%s\n", bptr);

   // *bptr = 'a';   // Error
}

您可以將常數資料指標當做函式參數使用,以防止函式修改透過指標傳遞的參數。

對於宣告為 const 的物件,您只能呼叫常數成員函式。 編譯器可確保該常數物件永不會遭到修改。

birthday.getMonth();    // Okay
birthday.setMonth( 4 ); // Error

您可以呼叫非常數物件的常數或非常數成員函式。 您也可以使用 const 關鍵字多載成員函式;這個功能可以針對常數和非常數物件呼叫不同版本的函式。

您不能以 const 關鍵字宣告建構函式或解構函式。

const 成員函式

使用 const 關鍵字宣告成員函式會指定函式為「唯讀」函式,不會修改針對其呼叫的物件。 常數成員函式無法修改任何非靜態資料成員,或是呼叫任何不是常數的成員函式。 若要宣告常數成員函式,請將 const 關鍵字放在引數清單的右括號後面。 宣告和定義中都需要 const 關鍵字。

// constant_member_function.cpp
class Date
{
public:
   Date( int mn, int dy, int yr );
   int getMonth() const;     // A read-only function
   void setMonth( int mn );   // A write function; can't be const
private:
   int month;
};

int Date::getMonth() const
{
   return month;        // Doesn't modify anything
}
void Date::setMonth( int mn )
{
   month = mn;          // Modifies data member
}
int main()
{
   Date MyDate( 7, 4, 1998 );
   const Date BirthDate( 1, 18, 1953 );
   MyDate.setMonth( 4 );    // Okay
   BirthDate.getMonth();    // Okay
   BirthDate.setMonth( 4 ); // C2662 Error
}

C 和C++ const 差異

當您在 C 原始程式碼檔案中定義 const 變數時,可以這麼做:

const int i = 2;

然後,您可以在其他模組中使用此變數,例如:

extern const int i;

不過,若要在 C++ 中得到相同行為,您必須將 const 變數定義為:

extern const int i = 2;

與 C 類似,您可以在另一個模組中使用這個變數,如下所示:

extern const int i;

如果您希望在 C ++ 原始程式碼檔案中定義 extern 變數,以用於 C 原始程式碼檔案中,請使用:

extern "C" const int x=10;

以避免 C++ 編譯器改變名稱。

備註

遵循成員函式的參數清單時,const 關鍵字會指定函式不會修改其叫用的物件。

如需const的詳細資訊,請參閱下列文章:

另請參閱

關鍵字