「C++/キャスト」の版間の差分

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++
削除された内容 追加された内容
M編集の要約なし
1 行 1 行
== 概要 ==
C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる:
C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる:
# static_cast
# static_cast

2021年4月14日 (水) 09:38時点における版

概要

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