定数値
定数 のキーワードは変数の値を設定して指定しコンパイラをプログラマが変更できないように指示します。
// constant_values1.cpp
int main() {
const int i = 5;
i = 10; // C3892
i++; // C2105
}
C++ では#define のプリプロセッサ ディレクティブの代わりに定数値を定義するために 定数 のキーワードを使用します。 定数 で定義されている値は型チェックに応じて定数式の代わりに使用できます。C++ では次のように 定数 変数の配列のサイズを指定して :
// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray]; // allowed in C++; not allowed in C
C では定数値は外部リンケージに設定されるためソース ファイルでのみ表示される場合もあります。C++ では定数値はヘッダー ファイルで表示されるようにするために内部リンケージになります。
定数 のキーワードはポインターの宣言に使用できます。
// constant_values3.cpp
int main() {
char *mybuf = 0, *yourbuf;
char *const aptr = mybuf;
*aptr = 'a'; // OK
aptr = yourbuf; // C3892
}
定数 として宣言されている 定数 として宣言されたポインターにのみ変数へのポインターに割り当てることができます。
// 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
関数のパラメーターとして設定するにデータが関数ポインターを介して渡されたパラメーターが変更されることを防ぐにはポインターを使用できます。
定数 として宣言されたオブジェクトの場合定数メンバー関数 のみ呼び出すことができます。これは定数オブジェクトは変更されないことを保証します。
birthday.getMonth(); // Okay
birthday.setMonth( 4 ); // Error
メンバー関数定数ではないオブジェクトの定数または非定数呼び出すことができます。または 定数 でキーワードを使用してメンバー関数はオーバーロードできます。; これは関数のバージョンが定数定数ではないオブジェクトに対して呼び出すことができます。
定数 キーワードのコンストラクターまたはデストラクターを宣言できません。
C および C++ の定数の違い
C. のソース・コード ファイルの 定数 として変数を宣言するとようにします :
const int i = 2;
次のように別のモジュールにこの変数を使用する :
extern const int i;
ただしC++ で同じ動作を取得するには次のように 定数 の変数を宣言する必要があります :
extern const int i = 2;
C. のソース・コード ファイルに使用する C.C++ のソース・コード ファイルの extern の変数を宣言する場合はを使用する :
extern "C" const int x=10;
C++ コンパイラで破壊される名前を設定します。