「C++/キャスト」の版間の差分
< C++
削除された内容 追加された内容
Semi-Brace (トーク | 投稿記録) |
Semi-Brace (トーク | 投稿記録) M編集の要約なし |
||
1 行 | 1 行 | ||
== 概要 == |
|||
C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる: |
C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる: |
||
# static_cast |
# static_cast |
2021年4月14日 (水) 09:38時点における版
概要
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