キャスト式

キャスト演算子は、明示的型変換 のために使用されます。 この演算子は、次のような形式です。ここで、T は型、expr は式です。

( T ) expr

これは expr の値を、型 T に変換します。C の場合は、この操作の結果は左辺値ではありません。 C++ では、T が参照である場合、この演算の結果は左辺値です。 それ以外の場合は、結果は右辺値です。

C++このセクションでのここから先の説明は、C++ だけに適用されます。

キャストは、そのオペランドが左辺値であれば、有効な左辺値です。 次の単純な代入式では、まず最初に右側が指定の型に変換され、次に左側内部の式の型へと変換さ れて、結果が 保管されます。 値は、指定された型に変換され、代入の値となります。 次の例では、i の型は char * です。

(int)i = 8     // This is equivalent to the following expression
(int)(i = (char*) (int)(8))

キャストに適用された複合代入演算の場合、複合代入の算術演 算子は、キャストの結果の型を使用して実行され、単純な代入の場合と同様に進められます。 次の式は同じです。 また、i の型は char * です。

(int)i += 8     // This is equivalent to the following expression
(int)(i = (char*) (int)((int)i = 8))

左辺値キャストのアドレスの取得は機能しません。その 理由は、アドレス演算子をビット・フィールドに適用できないためです。

次の関数スタイルの表記を使用して、expr の値を型 T に変換することも可能です。

expr( T )

引き数を取らない関数スタイルのキャスト (X() など) は、 宣言 X t() に等価です。ここで、t は、一時オブジェクトです。 同様に、複数の引き数 (X(a, b) など) を持つ関数スタイルのキャストは、 宣言 X t(a, b) に等価です。

C++ の場合は、オペランドには、クラス型を指定できます。オペランドにクラス型が指定された場合 は、クラスにユーザー定義の型変換関数がある任意の型にキャストすることが できます。これらのキャストは、ターゲット型がクラスであれば、コンストラクターを 呼び出すことができますし、ソース型がクラスであれば、型変換関数を呼び出すことができます。 これらのキャストは、両方の条件が該当する場合は、不明瞭になります。

明示的型変換は、C++ 型変換演算子 static_cast を使用することによっても表現できます。

以下は、キャスト演算子の使用法を示したものです。 この例では、サイズ 10 の整数配列を動的に作成します。

#include <stdlib.h>
 
int main(void) {
   int* myArray = (int*) malloc(10 * sizeof(int));
   free(myArray);
   return 0;
}
malloc() ライブラリー関数は、その引き数のサイズのオブジェクトを保持するメモリーを指す void ポインターを戻します。 ステートメント int* myArray = (int*) malloc(10 * sizeof(int)) は、 以下のことを行います。

関連参照

IBM Copyright 2003