そろそろC++やるぞパート23 演算子 「キャスト演算子」
そろそろC++やります
そろそろC++をやります。そろそろC++をやりたいからです。
何回やるかはわかりません。基礎を理解するまではやろうと思います。
という感じでやっています。
※ 初心者がメモレベルで記録するので、技術記事としてはお力になれないかもしれません。
内容
- 今回は「4種類のキャスト演算子」を行っていきます。
const_cast 演算子
構文
const_cast <type-id> (expression)
const_cast
は型変換をするのでなく、const
やvolatile
の追加や削除を行います。
const int *a = new int(13); int *b = const_cast<int *>(a); volatile int *c = new int(123); int *d = const_cast<int *>(c);
継承された型について
class Base { }; class Derived : public Base { };
const_cast
の型指定に親の型を書いてキャストすることはできません。キャストしてから親の型の変数に代入します。
const Derived *a = new Derived{}; Derived *b1 = const_cast<Derived *>(a); // OK Base *b2 = const_cast<Derived *>(a); // OK Base *b3 = const_cast<Base *>(a); // Error
これは、あまり使わないと思います。
dynamic_cast 演算子
構文
dynamic_cast < type-id > ( expression )
小クラスから親クラスへキャストする時に使用します。正確にはポリモーフィッククラスにキャスト可能だそうです。
Derived *a = new Derived(); Derived *b = dynamic_cast<Derived *>(a); Base *c = dynamic_cast<Base *>(a); Derived *d = dynamic_cast<Derived *>(c); // Error
これは、使いそうです。
reinterpret_cast 演算子
構文
reinterpret_cast < type-id > ( expression )
他のポイント型に、強制的に型変換します。
char
やint
、long
など実質整数型の時に相性が良く使えます。
char *e = new char('a'); int *f = reinterpret_cast<int *>(e); // OK
これは必要に応じて使いそうです。
static_cast 演算子
構文
static_cast <type-id> ( expression )
暗黙の型変換を明示的に行う時に使います。省略できる場合がほとんどです。
long a = 100; int b = a; int c = static_cast<int>(a);
あまり明示的にしたい時はないような気がしますが、必要になったら使います。
参考リスト
- const_cast 演算子 | Microsoft Learn
- const_cast 演算子 (C++ のみ)
- dynamic_cast 演算子 | Microsoft Learn
- dynamic_cast 演算子 (C++ のみ)
- C++と 4 つのキャスト演算 | yunabe.jp
- static_cast 演算子 | Microsoft Learn
感想
今回も演算子の続きを行いました。ポインタのキャストや、明示的なキャストと4種類やりましたが、dynamic_cast
をよく使うのかなという印象です。
次回も、演算子の続きを行なっていきます。