キャスト演算子 ()

構文図を読む構文図をスキップするキャスト式構文
 
>>-(--type--)--expression--------------------------------------><
 

C のみこの演算子の結果は左辺値ではありません。 C++ のみ この演算子の結果は、 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++ のみ。

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 スタイル・キャストを使用して 明示的に numint に変換した値が代入されます。整数 x2 には、関数スタイル・キャストを使用して変換された値が代入されます。 整数 x3 には、static_cast 演算子を使用して変換された値が代入されます。

キャストは、そのオペランドが左辺値の場合、有効な左辺値です。 以下の単純な代入式では、最初に右側が、指定された型に変換され、次に内側の 左側の式の型に変換され、結果が保管されます。 その値が、指定された型に変換し直されて、それが代入の値になります。 次の例では、ichar * 型です。

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

C++ のみ。 の終り

関連情報



[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]