日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++的類型轉換(強轉)你了解嗎_C 語言

作者:是小明同學啊 ? 更新時間: 2022-04-25 編程語言

靜態類型轉換

關鍵字:?static_cast

1,允許內置數據類型之間的轉換

    char a = 'a';
	double b = static_cast(a);
	cout << b << endl;//97
	return 0;

<>中是轉后的數據類型。()中是要轉的變量名稱。

2,允許子類和父類之間指針或者引用的轉換

向上類型轉換是安全的。(子轉父)

向下類型轉換是不安全的。(父轉子)

指針轉換:

class Animal
{
};
class Dog :public Animal 
{
};
class Other
{
};
int main()
{
	Animal* animal = NULL;
	Dog* dog = NULL;
	//將animal轉為Dog*(向下類型轉換,不安全)
	Dog * dog2 = static_cast(animal);
	Other* other = static_cast(animal);//這個時候就會出錯了,因為兩個指針不是父子關系。
	return 0;
}

所以,父類和子類的指針可以通過靜態轉換而進行轉換。

引用轉換:

Animal animal;
Dog dog;
Animal& animalCopy = animal;
Dog& dogCopy = static_cast(animalCopy);
Dog& dogCopy2 = dog;
Animal& animalCopy2 = static_cast(dogCopy2);

在創建了對象以后,創建對象的引用,然后可以將創建的引用轉換為子/父類的引用類型。

動態類型轉換

與靜態類型轉換幾乎一樣,比靜態類型轉換更加安全。(因為在進行向下類型轉換的時候具有類型檢查的功能;如果會丟失精度或信息的情況下就不允許轉換)

關鍵字:dynamic_cast

1,不允許內置數據類型之間的轉換

2,父類和子類之間

(1)允許父子之間指針或者引用的轉換。

(2)有些時候父轉子會出現問題。如果發生了多態,那么轉換總是安全的。多態就是用父類的指針指向子類的對象,且父類中有虛函數,子類重寫父類中的虛函數。

常量轉換

關鍵字:const_cast

該運算符用來修改類型的const屬性(若原先是常量,那么使用后變為非常量;若原先是非常量,那么使用后變成常量)

(1)常量指針被轉化為非常量指針,并且指向原對象。

(2)常量引用被轉換成非常常量引用,并且指向原對象。

注意:此關鍵字只針對指針和引用,不能對其他const屬性進行修改。

	//指針:
	const int* p = NULL;
	int* pp = const_cast(p);
	const int* ppp = const_cast(pp);
	//引用:
	int num = 10;
	int& num2 = num;
	const int& num3 = const_cast(num2);

重新解釋轉換

不安全的轉換。(可以將int類型轉換為int*類型)

關鍵字:reinterpret_cast(a)

	int a = 10;
	int* p = reinterpret_cast(a);

不同類(毫無關系的類)的指針之間也可以進行轉換。

總結

原文鏈接:https://blog.csdn.net/qq_51399192/article/details/123042288

欄目分類
最近更新