「C++/キャスト」の版間の差分
< C++
削除された内容 追加された内容
Semi-Brace (トーク | 投稿記録) ページの作成:「C++ではC言語で見られるキャストに加え、以下キーワードを用いてキャストを行うことができる: # static_cast # const_cast # dynamic_cast…」 |
Semi-Brace (トーク | 投稿記録) |
||
30 行 | 30 行 | ||
# 曖昧ではなく非virtualな基底クラスのポインターやリファレンスあるいはメンバーへのポインターから、派生クラスのポインターやリファレンスあるいはメンバーへのポインターへの変換 |
# 曖昧ではなく非virtualな基底クラスのポインターやリファレンスあるいはメンバーへのポインターから、派生クラスのポインターやリファレンスあるいはメンバーへのポインターへの変換 |
||
ただし、これらのキャストはアクセス修飾子を無視するため、出現した場合は設計が間違っているとされる<ref name="cpplover">。 |
ただし、これらのキャストはアクセス修飾子を無視するため、出現した場合は設計が間違っているとされる<ref name="cpplover" />。 |
||
== 出典 == |
== 出典 == |
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