キャスト式構文 >>-(--type--)--expression--------------------------------------><
この演算子の結果は左辺値ではありません。 この演算子の結果は、 type が参照である場合に左辺値になります。それ以外のすべての場合には、結果は右辺値になります。
以下の例では、キャスト演算子を使用して、サイズ 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)) は、 以下のことを行います。
C++ では、キャスト式で以下も使用できます。
関数スタイル表記は、expression の値を型 type に変換します。
expression( type )
以下の例では、C スタイル・キャスト、C++ 関数スタイル・キャスト、および C++ キャスト演算子で同じ値をキャストしています。
#include <iostream> using namespace std; int main() { float num = 98.76; int x1 = (int) num; int x2 = int(num); int x3 = static_cast<int>(num); cout << "x1 = " << x1 << endl; cout << "x2 = " << x2 << endl; cout << "x3 = " << x3 << endl; }
上記の例の出力は、以下のとおりです。
x1 = 98 x2 = 98 x3 = 98
整数 x1 には、C スタイル・キャストを使用して 明示的に num を int に変換した値が代入されます。整数 x2 には、関数スタイル・キャストを使用して変換された値が代入されます。 整数 x3 には、static_cast 演算子を使用して変換された値が代入されます。
キャストは、そのオペランドが左辺値の場合、有効な左辺値です。 以下の単純な代入式では、最初に右側が、指定された型に変換され、次に内側の 左側の式の型に変換され、結果が保管されます。 その値が、指定された型に変換し直されて、それが代入の値になります。 次の例では、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))
C++ の場合は、キャスト式のオペランドには、クラス型を指定できます。オペランドにクラス型が指定された場合は、クラスにユーザー定義の型変換関数がある 任意の型にキャストすることができます。これらのキャストは、ターゲット型がクラスであれば、コンストラクターを 呼び出すことができますし、ソース型がクラスであれば、型変換関数を呼び出すことができます。 これらのキャストは、両方の条件が該当する場合は、不明瞭になります。
関連情報