C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のキャスト演算子とは?4種類のキャストの違いと使い方を解説

キャスト演算子とは

キャスト(cast)とは、あるデータ型を強制的に別のデータ型へ変換するための特殊な演算子です。キャストは単項演算子の一種であり、他の単項演算子と同じ優先順位を持ちます。

多くのC++コンパイラがサポートしている、最も一般的なキャストの構文は次のとおりです。

(type) expression

ここで「type」は変換後の目的のデータ型を表します。C++では、このCスタイルのキャストに加えて、目的別に設計された次の4つのキャスト演算子が用意されています。

C++の4つのキャスト演算子

  • const_cast<type>(expr) − キャスト時にconstやvolatile属性を明示的に付け外しするための演算子です。変換元と変換先の型は、const / volatile属性を除いて同一である必要があり、オブジェクトのconst属性を設定または解除する場面で使用します。
  • dynamic_cast<type>(expr) − 実行時(ランタイム)にキャストの妥当性を検証しながら変換を行う演算子です。変換が不可能な場合はキャストが失敗し、式はnullとして評価されます。dynamic_castはポリモーフィックな型に対して使用され、ポイント先のオブジェクトが実際にB型である場合にのみ、A*型ポインタをB*型ポインタへ変換できます。
  • reinterpret_cast<type>(expr) − ポインタを任意の別の型のポインタへ変換する演算子です。これにより、ポインタから整数型への変換、およびその逆の変換も可能になります。
  • static_cast<type>(expr) − 非ポリモーフィックなキャストを実行する演算子です。たとえば、基底クラスのポインタを派生クラスのポインタへ変換する場合などに使用できます。

補足:CスタイルキャストとC++スタイルキャスト

(int)a のようなCスタイルのキャストは記述が簡単ですが、意図が分かりにくく、危険な変換まで許してしまうことがあります。現代のC++では、目的に応じて上記の4つの名前付きキャストを使い分けることが推奨されています。

サンプルコード

これらのキャストはケースごとに使い分けが必要です。まずは、コンパイラによって実装される基本的なキャストの例を見てみましょう。次のプログラムでは、double型とfloat型の値をint型へキャストしています。

#include <iostream>
using namespace std;

int main() {
    double a = 21.09399;
    float b = 10.20;
    int c;

    c = (int) a;
    cout << "行1 - (int)a の値 :" << c << endl;

    c = (int) b;
    cout << "行2 - (int)b の値 :" << c << endl;

    return 0;
}

実行結果

このプログラムを実行すると、次の出力が得られます。

行1 - (int)a の値 :21
行2 - (int)b の値 :10

このように、浮動小数点数をint型へキャストすると、小数点以下は切り捨てられます。用途に応じた適切なキャスト演算子を選ぶことで、より安全で読みやすいコードになります。

  1. C++のconst_castとは?型キャスト演算子の基本と使い方を徹底解説

    この記事では、C++における const_cast の動作と使い方について詳しく解説します。const_castとはconst_cast は、C++に用意されている型キャスト演算子の一つです。主な用途は、オブジェクトからconst(定数)性を取り除くことです。つまり、本来変更できないはずの定数オブジェクトを、あたかも書き換え可能なオブジェクトであるかのように扱えるようにします。プログラムの中で「基本的には定数として扱いたいが、特定のタイミングでのみ値を変更したい」というオブジェクトがある場合に、const_cast が役立ちます。構文const_cast の構文は以下の通りです。const_c

  2. C/C++の型キャストとは?基礎から整数昇格・通常の算術型変換まで解説

    型キャスト(型変換)とは、あるデータ型の変数を別のデータ型へ変換する手法のことです。例えば、long型の値を単純なint型の変数に格納したい場合、longをintへキャストすることができます。値をある型から別の型へ明示的に変換するには、キャスト演算子を次の形式で使用します。(型名) 式キャスト演算子の使用例次の例では、キャスト演算子によって整数変数同士の除算が浮動小数点演算として実行されます。#include <stdio.h> main() { int sum = 17, count = 5; double mean; mean = (double) su