次の方法で共有


定数値

const キーワードは、変数の値が定数であることを指定し、プログラマによる変更を防止するようにコンパイラに指示します。

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

C++ では、#define プリプロセッサ ディレクティブの代わりに const キーワードを使用して定数値を定義できます。 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 *mybuf = 0, *yourbuf;
   char *const aptr = mybuf;
   *aptr = 'a';   // 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
}

出力

test
test

定数データへのポインターを関数パラメーターとして使用して、ポインターを通じて渡されるパラメーターが関数によって変更されないようにすることができます。

const として宣言されたオブジェクトの場合、定数メンバー関数のみ呼び出すことができます。 これによって、定数オブジェクトは変更されなくなります。

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

非定数オブジェクトに対して、定数または非定数のメンバー関数を呼び出すことができます。 また、const キーワードを使用してメンバー関数をオーバーロードすることもできます。これによって、定数および非定数オブジェクトに対して関数の異なるバージョンが呼び出されるようになります。

const キーワードを持つコンストラクターまたはデストラクターは宣言できません。

C と C++ での const の相違点

C ソース コード ファイルで変数を const として宣言する場合は、次のようにします。

const int i = 2;

そして、次のように、この変数を別のモジュールで使用できます。

extern const int i;

しかし、C++ で同じ動作を得るには、次のように const 変数を宣言する必要があります。

extern const int i = 2;

C ソース コード ファイルで使用できるように C++ ソース コード ファイルで extern 変数を宣言する場合は、次のコードを使用してください。

extern "C" const int x=10;

C++ コンパイラによる名前修飾を防止します。

参照

関連項目

const (C++)

定数メンバー関数