詳解強制類型轉換

今天談談類型轉換的問題吧,之前我們也遇到過類型轉換,比如c語言中這樣的賦值:


顯然,i和j是不同類型的變量,但是卻可以完成賦值,結果是這樣的:


其實它們是做了隱式的類型轉換,相當于:double j = (double)i;所以成功的賦值。

還有另外一種:


結果是:


像這樣的,屬于顯示的類型轉換。

這樣類似的還有很多。下面我介紹c++中幾種特殊的類型轉換:

1、static_cast

static_cast用于相關類型的轉換(如int,double),屬于靜態轉換。

? ? ?比如:


結果:


2、reinterpret_cast(reinterpret:重新解釋的意思哈)

reinterpret_cast用于不相關類型的轉換。

比如例子1:


例子2:


結果:


像第二種這樣的例子,是對于函數而言,C++不保證所有的函數指針都被一樣的使用,所以這樣用有時會產生不
確定的結果。所以不建議這樣使用。

3、const_cast

const_cast是用于去掉常屬性的,方便賦值。

比如:


4、dynamic_cast

dynamic_cast用于將一個父類對象的指針或引用轉換為一個子類對象的指針或引用。



在這里,使用dynamic_cast,需要A類為多態類型。

dynamic_cast還有一個特點:

就在上述的代碼中,輸出pa,pb,可以看出:



· dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回0

如果換做static_cast就不會檢查:



這也是dynamic_cast更安全的地方。

以上就是四種強制類型轉換方式。


下面說一個關鍵字explicit:(阻止隱式調用構造函數)


在這里,隱式調用了我們的構造函數,是因為這里的1比較特殊,所以可以調用成功,但是這種寫法本身是不對的。如果換做其他的或許就不行了。為了避免這樣的書寫,我們會在A()函數前加上關鍵字explicit。像這樣:


這下就編譯不過了,提高了代碼安全性。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382853.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試--輸入一堆隨機數(0-1000),這里面會有重復的數字,把他們去除掉。然后由大到小排列。

1.問題說明 11 10 20 40 32 67 40 20 89 300 400 15 10 15 20//只顯示1次 32 40//只顯示1次 67 89 300 400 正常的算法: 1.遍歷所有數組,去除掉重復的數字 2.使用XX排序法,進行數字的排序。 眼前一亮的機器算法 1.生成1-1000的數組&am…

c++之類型萃取

剛剛我們接觸過模板類,類似于這樣的: 在這個類中,我們如何知道它是什么類型的呢?這里,我們可以在類中加入一個內嵌類型,如: 這樣就可以知道它是用戶自定義的還是本身類型就擁有的,我…

django xadmin出現的問題

1.File “/home/yuanqi/.virtualenvs/djangodev1/lib/python3.5/site-packages/xadmin/sites.py”, line 9, in reload(sys) import importlib importlib.reload(sys)# sys.setdefaultencoding("utf-8")把相應文件改為上述這樣

一道面試題--兩個int(32位)整數m和n的二進制表達中,有多少個位(bit)不同

1.問題說明 十進制4 0100 十進制8 1000二進制不同的 0100 1000有兩位不同 正常的算法 1.兩個數字與1&#xff0c;拿出兩個數字的最后一位&#xff0c;比較是否相同&#xff0c;直到右移32次&#xff0c; for (int i 0; i < 32; i){if ((m & 1) ! (n & 1)){count…

時間復雜度空間復雜度

我們編過不少代碼&#xff0c;起初學習的時候我們習慣性的認為&#xff0c;只要代碼能正確的運行就ok啦~很少考慮代碼的優化帶來的好處。今天說一下影響代碼性能的兩個重要指標--時間復雜度&空間復雜度。 時間復雜度&#xff1a;就是函數&#xff08;指數學中的函數&#…

C語言 函數遞歸例題解析

1.接受一個整形值&#xff08;無符號&#xff09;&#xff0c;把它轉換為 字符并打印它模擬實現strlen()函數。3.求n的階乘4.斐波那契數列總結 1.接受一個整形值&#xff08;無符號&#xff09;&#xff0c;把它轉換為 字符并打印它 void fun(int x) {if (x > 9){fun(x/10)…

xpath 簡單用法小記

1 xpath定位 沒有某個屬性的元素 例如定位沒有class屬性的td tds tr.xpath(.//td[not(class)])

剖析printf函數

printf是什么&#xff0c;對于起初學習c語言的同學來說肯定都特別的疑惑。在這里&#xff0c;解答一下&#xff1a;它是一個函數。既然是一個函數的話&#xff0c;想必肯定有返回值和參數吧。那么它的返回值和參數是什么呢&#xff1f; 1、看一下這個例子&#xff0c;可能更好…

大端小端詳解

文章目錄為什么有大端小端&#xff1f;大端&#xff1a;低位放在高地址&#xff0c;高位放在低地址小端&#xff1a;低位放在低地址&#xff0c;高位放在高地址面試考點&#xff1a;代碼代碼2一道面試題為什么有大端小端&#xff1f; 大端&#xff1a;低位放在高地址&#xff0…

xpath 簡單小記

1 定位沒有class屬性的td元素 tds tr.xpath(.//td[not(class)])

詳解volatile關鍵字

volatile字面意思&#xff1a;易變的。在計算機里&#xff0c;是防止優化的意思&#xff0c;然而是怎么防止優化的呢&#xff1f;待我一一道來哦。 先看這樣一個例子&#xff1a; <span style"font-size:18px;">#include<iostream> using namespace std…

C語言 有符號字符型輸出 面試題

1.第一題 int main() {int a 128;printf("%u\n", a);system("pause"); } 輸出結果 128 #include <stdio.h> #include <stdlib.h>int main() {char a 128;printf("%u\n", a);system("pause"); } 輸出結果 42949671…

正則表達式提取括號里面的值

轉自 https://blog.csdn.net/jiahaowanhao/article/details/80795148

有趣的鏈表相關題型

鏈表&#xff1a;也是線性表的一種。形象的來說&#xff1a; 就像火車的一個個車廂一樣&#xff0c;一個個的鏈起來的。它有一個特點&#xff1a;它的頭沒有前驅&#xff0c;尾沒有后繼。 為什么會引入鏈表這個概念呢&#xff1f;之前我們知道的順序表&#xff0c;是用數組的形…

簡陋版C語言仿真通訊錄

文件cotact.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "contact.h" /*初始化*/ void InitContact(pContact pc) {pc->count 0;memset(pc->data, 0, sizeof(pc->data)); }/*增加數據*/ void AddCon…

pip3 便捷安裝包

將虛擬環境下 的包列舉出來 并保存到文件夾 pip3 freeze > requirments.txt 一次性安裝文件里面所列舉的所有的包 pip3 install -r requirments.txt

有趣的約瑟夫環問題

大家有沒有聽過約瑟夫環這個問題呢&#xff1f;我們先來看看它是一個什么樣的問題~ 約瑟夫環&#xff08;Josephus&#xff09;問題是由古羅馬的史學家約瑟夫&#xff08;Flavius Josephus&#xff09;提出的。該問題的說法不一&#xff0c;傳說他參加并記錄了公元66—70年猶太…

C語言模擬實現標準庫函數之qsort() 2

C語言模擬實現標準庫函數之qsort() <1> https://blog.csdn.net/csdn_kou/article/details/80158194 排序數字 int int_cmp(const void *elem1, const void *elem2) { return *(int *)elem1 - *(int *)elem2; }int main() { int arr[] { 9,8,7,6,5,4,3,2,1 }; int siz…

node.js windows下安裝與配置

轉自 https://www.cnblogs.com/liuqiyun/p/8133904.html