static_cast 演算子 (C++ のみ)

static_cast 演算子は、与えられた式を指定された型に変換します。

構文図を読む構文図をスキップする
static_cast 演算子の構文 

>>-static_cast--<--Type-->--(--expression--)-------------------><

C++11右不等号括弧の機能により、2 つの連続する > トークンの代わりに >> トークンを使用して、template_idstatic_cast 演算子の Type として指定することができます。詳しくは、クラス・テンプレート (C++ のみ)を参照してください。C++11

static_cast<Type>(expression) の結果は、以下のいずれかの値のカテゴリーに属します。
  • Type が左辺値参照型である場合C++11または関数型に対する右辺値参照である場合C++11static_cast<Type>(expression) は左辺値です。
  • C++11Type がオブジェクト型に対する右辺値参照である場合、static_cast<Type>(expression) は xvalue です。C++11
  • それ以外すべての場合は、static_cast<Type>(expression) は、C++11(prvalue)C++11 右辺値です。

static_cast 演算子の例を以下に示します。

#include <iostream>
using namespace std;

int main() {
  int j = 41;
  int v = 4;
  float m = j/v;
  float d = static_cast<float>(j)/v;
  cout << "m = " << m << endl;
  cout << "d = " << d << endl;
}
この例の出力は次のとおりです。
m = 10
d = 10.25

この例では、m = j/v; は、型 int の答えを作成します。 なぜなら、jv の両方とも整数であるからです。 逆に、d = static_cast<float>(j)/v; は、型 float の答えを作成します。static_cast 演算子は、 変数 j を、型 float に変換します。 これによって、コンパイラーは、型 float の答えをもつ割り算を生成できます。 すべての static_cast 演算子は、コンパイル時に解決します。 そして、どの const または volatile 修飾子も除去しません。

static_cast 演算子を NULL ポインターに適用すると、ターゲット型の NULL ポインター値に変換されます。

本コンパイラーは、以下の種類のキャスト演算をサポートしています。
  • A の左辺値から型 B&。 キャスト結果は、型 B の左辺値です
  • C++11A の左辺値または xvalue から型 B&&。 キャスト結果は、型 B の xvalue になります。C++11
  • C++11(prvalue)C++11A へのポインターの右辺値から B へのポインター
  • C++11A の左辺値から 型 B&& (型 A の xvalue を 型 B&& の参照に直接バインドできる場合)C++11
  • e から型 T (直接初期化 T t(e) が有効な場合)。
最初の 3 つのキャスト演算がサポートされるには、以下の条件が満たされている必要があります。
  • A は、B の基底クラスである。
  • B を指すポインターから型 A を指すポインターへの標準の変換が存在する。
  • B が型 A同等以上に cv 修飾されている。
  • A が仮想基底クラスでなく、B の仮想基底クラスの基底クラスでもない。
以下の条件が満たされている場合は、型が cv1 T である A のメンバーへのポインターの C++11(prvalue)C++11 右辺値を、型が cv2 T である B のメンバーへのポインターの C++11(prvalue)C++11 右辺値にキャストできます。
  • B は、A の基底クラスである。
  • 型が T である B のメンバーを指すポインターから、型が T である A のメンバーを指すポインターへの標準の変換が存在する。
  • cv2cv1 と同等以上の cv 修飾である。

cv2cv1 と同等以上の cv 修飾である場合は、cv1 void を指すポインターを、cv2 void を指すポインターに明示的に変換できます。