概要

編集

C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる:

  1. static_cast
  2. const_cast
  3. dynamic_cast
  4. reinterpret_cast

static_cast

編集

const修飾子およびvolatile修飾子の付与、整数・小数型同士などのキャストに使う。

const_cast

編集

const修飾子、volatile修飾子を外すために使う。

dynamic_cast

編集

ダウンキャストするために使う。キャストに失敗した場合はnullptrが返される。

reinterpret_cast

編集

継承関係にない型同士、整数型とポインタ型の相互変換などに使う。

どう使い分けるのか

編集
  • static_castを使えるときは使う
  • const_castを使えるときは使う
  • dynamic_castを使えるときは使う
  • それでもダメならreinterpret_castを使う

C形式のcastにしかできないこと

編集

出典: [1]

  1. 派生クラスへのポインターやリファレンスから、基底クラスへのポインターやリファレンスへの変換
  2. 派生クラスのメンバーへのポインターから、曖昧ではない非virtualな基底クラスのメンバーへのポインターへの変換
  3. 曖昧ではなく非virtualな基底クラスのポインターやリファレンスあるいはメンバーへのポインターから、派生クラスのポインターやリファレンスあるいはメンバーへのポインターへの変換

ただし、これらのキャストはアクセス修飾子を無視するため、出現した場合は設計が間違っているとされる[1]

出典

編集
  1. ^ 1.0 1.1 https://cpplover.blogspot.com/2010/07/c.html 20210414
このページ「C++/キャスト」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。