const (C++)const (C++)

データの宣言を変更するときに、 constキーワードは、オブジェクトまたは変数に変更がないを指定します。When modifying a data declaration, the const keyword specifies that the object or variable is not modifiable.


const declaration ;
member-function const ;

const の値const values

Constキーワードは、変数の値は定数であり、コンパイラは、プログラマがこれを変更できないようにすることを指定します。The const keyword specifies that a variable's value is constant and tells the compiler to prevent the programmer from modifying it.

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

C++ では、使用することができます、 constキーワードの代わりに、 #defineプリプロセッサ ディレクティブの定数値を定義します。In C++, you can use the const keyword instead of the #define preprocessor directive to define constant values. 定義された値const型がチェックされる可能性があり、定数式の代わりに使用できます。Values defined with const are subject to type checking, and can be used in place of constant expressions. C++ では、使用して配列のサイズを指定することができます、 const変数として次のとおりです。In C++, you can specify the size of an array with a const variable as follows:

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

C では、定数値は既定で外部リンケージに設定されるため、ソース ファイルでのみ指定できます。In C, constant values default to external linkage, so they can appear only in source files. C++ では、定数値は既定で内部リンケージに設定されるため、ヘッダー ファイルで指定できます。In C++, constant values default to internal linkage, which allows them to appear in header files.

Constポインター宣言でキーワードを使用することもできます。The const keyword can also be used in pointer declarations.

// constant_values3.cpp
int main() {
   char *mybuf = 0, *yourbuf;
   char *const aptr = mybuf;
   *aptr = 'a';   // OK
   aptr = yourbuf;   // C3892

として宣言された変数へのポインター constとしても宣言されているポインターにのみ割り当てることができますconstします。A pointer to a variable declared as const can be assigned only to a pointer that is also declared as 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

定数データへのポインターを関数パラメーターとして使用して、ポインターを通じて渡されるパラメーターが関数によって変更されないようにすることができます。You can use pointers to constant data as function parameters to prevent the function from modifying a parameter passed through a pointer.

として宣言されているオブジェクトのconst、できるだけ定数メンバー関数を呼び出します。For objects that are declared as const, you can only call constant member functions. これによって、定数オブジェクトは変更されなくなります。This ensures that the constant object is never modified.

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

非定数オブジェクトに対して、定数または非定数のメンバー関数を呼び出すことができます。You can call either constant or nonconstant member functions for a nonconstant object. 使用してメンバー関数をオーバー ロードできますも、 constキーワードです。 これにより、別のバージョンの定数および非定数オブジェクトに対して呼び出される関数。You can also overload a member function using the const keyword; this allows a different version of the function to be called for constant and nonconstant objects.

コンス トラクターまたはデストラクターを宣言することはできません、 constキーワード。You cannot declare constructors or destructors with the const keyword.

const のメンバー関数const member functions

メンバー関数を宣言すること、 constキーワードは、関数が呼び出されたオブジェクトを変更しない「読み取り専用」関数であるを指定します。Declaring a member function with the const keyword specifies that the function is a "read-only" function that does not modify the object for which it is called. 定数メンバー関数は、非静的データ メンバーを変更またはメンバー定数でない関数を呼び出すことはできません。定数メンバー関数を宣言するには、配置、 const引数リストのかっこの後のキーワード。A constant member function cannot modify any non-static data members or call any member functions that aren't constant.To declare a constant member function, place the const keyword after the closing parenthesis of the argument list. Const宣言と定義の両方のキーワードが必要です。The const keyword is required in both the declaration and the definition.

// constant_member_function.cpp
class Date
   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
   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 and C++ const differences

として変数を宣言するときにconst C ソース コード ファイルでこれを行うとします。When you declare a variable as const in a C source code file, you do so as:

const int i = 2;

そして、次のように、この変数を別のモジュールで使用できます。You can then use this variable in another module as follows:

extern const int i;

C++ で同じ動作を取得することを宣言する必要があります、 const変数として。But to get the same behavior in C++, you must declare your const variable as:

extern const int i = 2;

宣言する場合、 extern C ソース コード ファイルの使用で使用するためには、C++ ソース コード ファイルで変数。If you wish to declare an extern variable in a C++ source code file for use in a C source code file, use:

extern "C" const int x=10;

C++ コンパイラによる名前修飾を防止します。to prevent name mangling by the C++ compiler.


次のメンバー関数のパラメーター リストでは、ときに、 constキーワードは、関数が呼び出されたオブジェクトを変更しないことを指定します。When following a member function's parameter list, the const keyword specifies that the function does not modify the object for which it is invoked.

詳細についてはconst、次のトピックを参照してください。For more information on const, see the following topics:

関連項目See also