C++/キャスト
< C++
概要[編集]
C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる:
- static_cast
- const_cast
- dynamic_cast
- 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]
- 派生クラスへのポインターやリファレンスから、基底クラスへのポインターやリファレンスへの変換
- 派生クラスのメンバーへのポインターから、曖昧ではない非virtualな基底クラスのメンバーへのポインターへの変換
- 曖昧ではなく非virtualな基底クラスのポインターやリファレンスあるいはメンバーへのポインターから、派生クラスのポインターやリファレンスあるいはメンバーへのポインターへの変換
ただし、これらのキャストはアクセス修飾子を無視するため、出現した場合は設計が間違っているとされる[1]。
出典[編集]
- ^ 1.0 1.1 https://cpplover.blogspot.com/2010/07/c.html 20210414