★static_cast★


C言語編でも様々な場面でキャストを使いました。

例えば、乱数の種を設定する

srand((unsigned int)time(NULL));

や、malloc関数を使う時に、

p = (int*)malloc(sizeof(int) * 5);

など、明示的に型変換が必要な場合に使ってきました。


C++ではキャストは数種類に分類され整理されています。

static_cast

reinterpret_cast

const_cast

dynamic_cast

この4種類です。

※dynamic_castはクラスの説明をしなければなりませんので今回は省きます。


static_cast


static_castは変数などの型を変換する際に使います。

例えば次のプログラムですが、

<sample program cpp044-01>

#include <iostream>

int main()
{
    double dblValue = 23.56;

    int intValue;

    intValue = dblValue;

    std::cout << intValue << std::endl;

    return 0;
}

<実行結果>

23
続行するには何かキーを押してください・・・

実行は出来ますが、コンパイル時に警告が出ています。

  warning C4244: '=': 'double' から 'int' への変換です。データが失われる可能性があります。

小数点以下の数値が切り捨てられるために警告しています。

ただ、プログラマが分かっていてこのプログラムを作っているのであればキャストを使って警告を消します。

<sample program cpp044-02>

#include <iostream>

int main()
{
    double dblValue = 23.56;

    int intValue;

    intValue = static_cast<int>(dblValue);

    std::cout << intValue << std::endl;

    return 0;
}

<実行結果>

23
続行するには何かキーを押してください・・・

こうする事で警告が消えました。


C++のキャストの使い方は↓の通りです。

static_cast<変換したい型>(対象となる式)

static_castに限らず他のキャストも同じ文法です。


次回はreinterpret_castを説明します。


次へ

戻る

目次へ