激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++類型轉換運算符詳解

C++類型轉換運算符詳解

2022-01-19 13:10程程之光 C/C++

這篇文章主要介紹了C++類型轉換運算符的相關資料,希望通過本文大家能夠掌握這部分內容,需要的朋友可以參考下,希望能夠給你帶來幫助

老式顯式類型轉換

(類型)表達式 c風格的強制類型轉換

類型(表達式) 函數式的強制類型轉換

1,最開始使用的是c風格的類型轉換,但是為了能夠使類型轉換看起來更像是一個函數調用,因此引入了函數式的類型轉換。函數式的類型轉換能夠像使用一個函數那樣去進行轉換,比c風格的要更好一些。

2,一般來說,建議以上兩種類型轉換方式不要使用,改為使用以下四種類型轉換方式,如果你拒絕這個提議的話,那么建議使用函數式的類型轉換方式。

c++的顯示類型轉換

舊式的類型轉換存在很多問題,因此,在c++中引入了新的類型轉換方式(當然,所謂新的也是幾十年前的事情了)。

static_cast

dynamic_cast

const_cast

reinterpret_cast

為什么要有新的類型轉換

這里主要存在兩個問題

第一,老式類型轉換沒有具體區分到底要怎么轉換,是上面四種類型中的哪一種,或者哪幾種?好處是,比較方便,因為,使用老式類型轉換,你無需具體區分到底使用的是哪一種,只要按照順序依次試一試能不能轉換就行了。壞處是,這種轉換是比較危險的,或者可能是用戶期望之外的。錯誤使用了類型轉換,但是卻沒有被發現,依然成功的被轉換了,這種行為會帶來更大的危害。

第二,老式類型轉換是比較難識別的,不管是c風格的也好,函數式的也好,都是只用一個括號就可以了。括號顯然比起static_cast<>這樣的形式難以識別的多。因此,在復雜一些的表達式中,如果使用了多次類型轉換,我們甚至很難去把里面所有的類型轉換全部找到,這也會造成很大的困擾。

具體應該使用哪種轉換

以前沒得選的時候,使用起來自然很容易,因為我們無需糾結使用哪種,直接用就行了。但是有了四種可供你選擇以后,這個問題就變的復雜起來了。到底應該用哪一種呢?什么時候應該用什么呢?當然,如果你實在分不清楚的話,那么首先應該嘗試一下static_cast

static_cast運算符

static_cast<類型>(表達式)

static_cast最常用的情況是,類型和要轉換的內容之間可以發生隱式類型轉換

?
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main()
{
    double a = 5 / 2;
    double b = static_cast<double>(5) / 2;
    // a的結果為2,b的結果為2.5
    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
}

如果通過static_cast去轉換具有繼承關系的類,那么向上或者向下轉換都是可以被允許的,但是轉換為無關的類型是不被允許的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
    class A{};
    class B: public A{};
    class C{};
    A a;
    B b;
    C c;
    A * p1 = static_cast<A *>(&b);
    B * p2 = static_cast<B *>(&a);
    // 轉換為無關類型是不被允許的
    // C * p3 = static_cast<C *>(&a);
}

dynamic_cast運算符

dynamic_cast<類型>(表達式)

dynamic_cast只用于在繼承層級上進行轉換,可轉換的類型為指針類型或者引用類型。

如果轉換的類型為指針類型,且轉換失敗,那么將返回空指針。

如果轉換的類型為引用類型,且轉換失敗,那么會拋出std::bad_cast類型異常。

注意:static_cast也可以用于這種類型轉換,但是一般來說在處理dynamic_cast能解決的問題時,使用dynamic_cast要好于static_cast。

const_cast運算符

const_cast<類型>(表達式)

const_cast被用于移除或者添加cv限定符,當然主要是用于const

如果你還不知道cv限定符,那么可以點擊這里查看有關cv限定符的描述

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{  
    int a = 100;
    const int * p1 = &a;
    // 該賦值肯定是不被允許的
    // *p1 = 200
    // 該定義也是不被允許的,const int *類型不被允許用于初始化int *
    // int * p2 = p1;
    // 使用const_cast類型轉換,將const int *類型轉換為int *類型
    int * p2 = const_cast<int *>(p1);
    *p2 = 200;
    cout << a << endl;
}

reinterpret_cast運算符

reinterpret_cast<類型>(表達式)

這是一種非常危險的轉換方式,它的功能是對類型進行重新解釋。也就是直接將表達式的內容,在底層層級上視為新類型。使用該運算符時應該非常謹慎小心。

老式顯式類型轉換實際的轉換方式

如果你使用了c風格或者函數式的顯式類型轉換,那么將會依次做這樣的嘗試,直到遇到第一個轉換成功的選項為止。

const_cast

static_cast

static_cast const_cast

reinterpret_cast

reinterpret_cast const_cast

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/light_of_cc/article/details/120639213

延伸 · 閱讀

精彩推薦
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 免费永久看羞羞片网站入口 | 91久久久久久久久久久久久久 | 中文字幕h| 国产视频91在线 | 日韩av一区二区三区在线观看 | 激情视频免费观看 | 黄色成人av在线 | 特一级毛片| 久久精品亚洲精品国产欧美kt∨ | 性少妇videosexfreexxx片 | 国产精品久久久久久久久久妇女 | 黄色高清免费 | 欧美人与性禽动交精品 | 羞羞电影在线观看 | 国产成人精品二区 | 伊人欧美 | 人人舔人人射 | 18pao国产成人免费视频 | 在线免费日韩 | 亚洲一区二区三区四区精品 | 成人不卡一区二区 | 黄色免费在线电影 | 成人性视频在线 | 成人毛片100免费观看 | 欧美中文字幕一区二区三区亚洲 | 国产啊v在线观看 | 看免费毛片| 国产乱乱视频 | 性欧美xxxx极品摘花 | 久久草在线视频免费 | 欧美黑人伦理 | 欧美日韩亚洲另类 | xxxxhd73国产| av免费提供| 国产亚洲精品久久久久婷婷瑜伽 | 毛片视频免费观看 | 黄色成人小视频 | 草草在线观看 | 欧美一级黄色免费 | 精品国产乱码久久久久久丨区2区 | 日韩一级免费毛片 |