C ++の4種類の強制演算子

C ++でのキャストの4つのタイプは、const_cast、static_cast、dynamic_cast、reinterpret_castです。これは、特に初心者にとって、C ++で非常に一般的なトピックです。次に...
一般的に、タイプ変換では次の状況が発生します。
-int変換float:計算の精度の向上、
-int変換enum:列挙はイデオグラムによく使用されます。実際の計算は引き続きint型です。
- intおよびポインター変換:オフセットビットに基づいてオブジェクトのメモリ空間内のメンバー変数の位置を計算しようとすると、計算のためにポインターを整数に変換する必要があります。変数(整数型)の位置を計算するときは、ポインタ型に変換する必要があります。
-型付きポインターと型なしポインター:
-異なる長さのデータの変換データの傍受の問題;
-継承を伴うクラスポインター変換:主に多態的なシナリオで使用されます;
-継承を伴わないクラスポインター変換:特に一般的ではありません

上記の条件をテストすると、次の問題が発生します
。1。コンパイラエラー。これは、この使用が違法であると文法が規定しているためです。したがって、コンパイラがコードをコンパイルすると、この動作は違法であると見なされ、後続のプロセスが終了します。
2.操作中にエラーが発生しました。これは文法的に合法であるためですが、実行時には合理的ではありません。

以下では、主にconst_cast、static_cast、dynamic_cast、およびreinterpret_castの4種類の強制の違いについて説明します。

1. static_cast

以下に示すように、最も一般的に使用されるタイプの変換演算子です。

int i;
float f = 3.28;
i = static_cast<int>(f);

2. const_cast

constは、その長さを定量化するものと見なされるべきではありませんが、逆に、その機能は、変数のconst属性を取り出し、constタイプのポインターを非constタイプのポインターに変換することです。

const int *fun(int a, int b){}
int const_cast<int *> (fun(1, 2));

3. dynamic_cast

これは主に、型変換が実行時に型の安全性に準拠しているかどうかを確認するために使用されますが、多態的な型で使用される場合、つまりクラスに少なくとも1つの仮想がある場合にのみ有効です。

4. reinterpret_cast

再解釈の中国語の意味は「再解釈」を意味します。ホットinterpret_castのデータのバイナリ形式は再解釈されますが、バイナリ値は変更されません。次のように:

int i;
char *ptr = "I Love You!!!";
int i = reinterpret_cast<int>(ptr);

次のコードは、前のケースを置き換えます。

//指针转换整型
int a = dynamic_cast<int>(int *p);
//整型转换指针
int *p = dynamic_cast<int *>(int a);

//整型转换浮点型
float a = dynamic_cast<float>(int a);
//浮点型转换整型
int a = dynamic_cast<int>(float);

//类型指针转换无类型指针
void *p = dynamic_cast<void *>(int *p1);
//无类型指针转换类型指针
int *p = dynamic_cast<int *>(void *p);

//整型转换枚举
TYPE t = dynamic_cast<TYPE>(int a);
//枚举转换整型
int a = dynamic_cast<int>(TYPE t);

//无类型指针转换整型
int a = dynamic_cast<int>(void *p);
//无类型指针转换其他指针
Other *p = dynamic_cast<Other *>(void *pv);

おすすめ

転載: blog.csdn.net/CFH1021/article/details/73743814