溫馨提示×

C++類型轉(zhuǎn)換運(yùn)算符能用于哪些類型

c++
小樊
81
2024-11-09 05:44:35
欄目: 編程語言

C++ 類型轉(zhuǎn)換運(yùn)算符(type conversion operators)主要有四種:static_cast、dynamic_cast、const_castreinterpret_cast。它們可以用于以下類型:

  1. static_cast

static_cast 是最常用的類型轉(zhuǎn)換運(yùn)算符,主要用于執(zhí)行基礎(chǔ)數(shù)據(jù)類型之間的轉(zhuǎn)換(如 int 到 double)、空指針和空指針之間的轉(zhuǎn)換、非多態(tài)類型的上下轉(zhuǎn)換以及向上轉(zhuǎn)型(將派生類對象轉(zhuǎn)換為基類對象)。但是,它不能轉(zhuǎn)換不相關(guān)的類型(如將 std::string 轉(zhuǎn)換為 int)。

int num = 42;
double d = static_cast<double>(num); // int to double

int* p1 = nullptr;
int* p2 = static_cast<int*>(p1); // nullptr to int* (unsafe)

class Base {};
class Derived : public Base {};

Derived d;
Base* b = static_cast<Base*>(&d); // Upcasting (Base* to Derived*)
  1. dynamic_cast

dynamic_cast 主要用于在類的繼承層次結(jié)構(gòu)中執(zhí)行向下轉(zhuǎn)型(將基類對象轉(zhuǎn)換為派生類對象)。它會在運(yùn)行時檢查轉(zhuǎn)換的有效性,如果轉(zhuǎn)換不安全,則返回空指針(對于指針類型)或拋出 std::bad_cast 異常(對于引用類型)。

class Base { virtual void foo() {} };
class Derived : public Base {};

Base* b = new Derived;
Derived* d = dynamic_cast<Derived*>(b); // Downcasting (Base* to Derived*)
  1. const_cast

const_cast 用于修改類型的常量性或易變性。它可以添加或刪除類型的 constvolatile 修飾符。

const int num = 42;
int* p = const_cast<int*>(&num); // Remove const from int*

const char* str = "Hello, World!";
char* cstr = const_cast<char*>(str); // Remove const from char* (unsafe)
  1. reinterpret_cast

reinterpret_cast 提供了一種低級別的類型轉(zhuǎn)換,通常用于位模式的重新解釋。它可以執(zhí)行指針類型之間的轉(zhuǎn)換(包括向上轉(zhuǎn)型和向下轉(zhuǎn)型)、整數(shù)類型與指針類型之間的轉(zhuǎn)換以及同類型指針之間的轉(zhuǎn)換。但是,reinterpret_cast 的轉(zhuǎn)換行為很少是有定義的,因此在使用時要特別小心。

int num = 42;
int* p = &num;
char* c = reinterpret_cast<char*>(p); // Pointer to int to pointer to char

float f = 3.14f;
int* i = reinterpret_cast<int*>(&f); // Float to int (implementation-defined)

請注意,在使用這些類型轉(zhuǎn)換運(yùn)算符時,務(wù)必確保轉(zhuǎn)換的安全性,以避免產(chǎn)生未定義的行為或運(yùn)行時錯誤。

0