最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ explicit關鍵字講解

 更新時間:2021年12月24日 10:50:51   作者:龍小  
這篇文章主要介紹了C++ explicit關鍵字講解,++提供了explicit關鍵字,相對于implicit而言,他默認關閉了隱式類型轉(zhuǎn)換方法。至于兩者有什么區(qū)別,看下面文章內(nèi)容的介紹吧

前言:

C++編碼時,可以通過構(gòu)造函數(shù)將相應的數(shù)據(jù)類型轉(zhuǎn)換成為C++類的對象,從某種程度來說給編碼帶來了方便,但并不是每次都正確,為了避免這種情況,C++提供了explicit關鍵字,相對于implicit而言,他默認關閉了隱式類型轉(zhuǎn)換方法。至于兩者有什么區(qū)別,通過下面的代碼進行比較說明。

1 隱式轉(zhuǎn)換

C++ 構(gòu)造函數(shù)默認類型為implicit,定義時既可以顯示說明也可以默認不加該標識符。

// 沒有使用explicit關鍵字的類聲明, 即默認為隱式聲明  
class CString{  
private:
    char *m_pStr;  
    int m_iSize; 
public: 
    CxString(int size){  
        m_iSize = size;
        m_pStr = malloc(m_iSize + 1);
        memset(m_pStr, 0, m_iSize + 1);  
    }  
    CxString(const char *p)  {  
        int size = strlen(p);  
        m_pStr = malloc(size + 1);
        strcpy(m_pStr, p);
        m_iSize = strlen(m_pStr);  
    }
    ~ CxString(){
        if(m_pStr)
        {
            delete m_pStr;
            m_pStr = nullptr;
        }
    }
};


如上的代碼中在實例化類的對象時以下方法都是正確的。

如下所示:

CString str1("12121");//CxString(const char *p)  
CString str2="abc";//CxString(const char *p)
CString str4(4);//CxString(int size) 
CString str5=6;//CxString(int size)


上面的使用方式都會默認調(diào)用相應的構(gòu)造函數(shù)實現(xiàn)對象的初始化,以CString str5=6為例,在對對象進行實例化的過程中主要進行了如下操作:

CString string5(6); 
//或者如下所示 
CString temp(6);  
CString string5 = temp; 


2 顯示轉(zhuǎn)換

在構(gòu)造函數(shù)上使用了explicit關鍵字后,通過構(gòu)造函數(shù)進行對象實例化時需要進行顯示類型轉(zhuǎn)化。否則將會報錯。

依舊以上面的代碼為例:

class CString{  
private:
    char *m_pStr;  
    int m_iSize; 
public: 
    explicit CString(int size) {  
        m_iSize = size;
        m_pStr = (char *)malloc(m_iSize + 1);
        memset(m_pStr, 0, m_iSize + 1);  
    }  
    explicit CString(const char *p){  
        int size = strlen(p);  
        m_pStr = (char *)malloc(size + 1);
        strcpy(m_pStr, p);
        m_iSize = strlen(m_pStr);  
    }
};


如上:再次使用相同得到方式對類進行實例化時將會報錯,報錯內(nèi)容如下:

通過運行結(jié)果可以說明:explicit關鍵字可以防止構(gòu)造函數(shù)進行隱式自動轉(zhuǎn)換

3 再次拆解

explicit關鍵字只對構(gòu)造函數(shù)有一個參數(shù)的形式有效,如果構(gòu)造函數(shù)有多個參數(shù)時explicit的功能也將失效,但是C++也提供了一種例外,既如果構(gòu)造函數(shù)的其他參數(shù)都有默認值及時參數(shù)個數(shù)大于1個explicit也是生效的。

如下面的代碼所示:

class CPoint
{  
private:
    float m_fX;  
    float m_fY; 
public: 
    explicit CPoint(float x,float y=9.8):m_fX(x),m_fY(y) 
    {  
        
    }  
};  
int main()
{
    CPoint point1(2,3);
    CPoint point2=4.5;
    return 0;
}


如代碼所示,編譯時將會報錯,報錯內(nèi)容為:

如果要解決上面的問題可以用下面得到方法:

按照顯示類型轉(zhuǎn)換的方式進行處理,如:

 CPoint point1(2,3);
CPoint point2(4.5);


將explicit關鍵字去掉,允許構(gòu)造函數(shù)進行隱式轉(zhuǎn)換數(shù)據(jù)類型,如:

CPoint(float x,float y=9.8):m_fX(x),m_fY(y) 
{          
}  

到此這篇關于C++ explicit關鍵字講解的文章就介紹到這了,更多相關C++ explicit關鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C/C++中常用加密與解密算法的實現(xiàn)

    C/C++中常用加密與解密算法的實現(xiàn)

    這篇文章主要為大家詳細介紹了一些在C++中常用的加密與解密算法,這其中包括Xor異或、BASE64、AES、MD5、SHA256、RSA等,感興趣的小伙伴可以學習一下
    2023-11-11
  • C++異常處理入門(try和catch)

    C++異常處理入門(try和catch)

    C++ 提供了異常機制,讓我們能夠捕獲運行時錯誤,本文就詳細的介紹了C++異常處理入門,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++中前綴和數(shù)組(算法)基本介紹

    C++中前綴和數(shù)組(算法)基本介紹

    前綴和(Prefix Sum)是指數(shù)組中某個位置之前的所有元素的和,本文將介紹C++中前綴和數(shù)組(算法)基本概念,感興趣的朋友一起看看吧
    2024-12-12
  • C/C++ 讀取16進制文件的方法

    C/C++ 讀取16進制文件的方法

    下面小編就為大家?guī)硪黄狢/C++ 讀取16進制文件的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++ cin輸入的多種方法詳解

    C++ cin輸入的多種方法詳解

    cin是C++編程語言中的標準輸入流對象,即stream類的對象。cin主要用于從標準輸入讀取數(shù)據(jù),這里的標準輸入,指的是終端的鍵盤。接下來通過本文給大家分享C++ cin輸入的幾種方式,一起看看吧
    2021-09-09
  • C++ 簡單的任務隊列詳解

    C++ 簡單的任務隊列詳解

    下面小編就為大家?guī)硪黄狢++ 簡單的任務隊列詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++ 將文件數(shù)據(jù)一次性加載進內(nèi)存實例代碼

    C++ 將文件數(shù)據(jù)一次性加載進內(nèi)存實例代碼

    這篇文章主要介紹了C++ 將文件數(shù)據(jù)一次性加載進內(nèi)存實例代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • C語言如何輸出中文

    C語言如何輸出中文

    這篇文章主要介紹了C語言如何輸出中文問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字

    C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字

    這篇文章主要為大家介紹了C/C++題解LeetCode1295統(tǒng)計位數(shù)為偶數(shù)的數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • C語言使用深度優(yōu)先搜索算法解決迷宮問題(堆棧)

    C語言使用深度優(yōu)先搜索算法解決迷宮問題(堆棧)

    這篇文章主要介紹了C語言使用深度優(yōu)先搜索算法解決迷宮問題,涉及C語言堆棧的使用與深度優(yōu)先算法解決迷宮問題的相關操作技巧,需要的朋友可以參考下
    2017-09-09

最新評論

宾阳县| 鹰潭市| 辽阳县| 辰溪县| 阿图什市| 兴海县| 贞丰县| 新泰市| 长武县| 庐江县| 大余县| 庆城县| 澄迈县| 蓝田县| 苏尼特左旗| 河曲县| 城步| 江北区| 清新县| 商城县| 武平县| 永康市| 卓尼县| 商洛市| 班玛县| 宁都县| 西吉县| 海南省| 游戏| 沾益县| 营口市| 灵武市| 长兴县| 金沙县| 寿宁县| 阿图什市| 喀什市| 盘山县| 保康县| 太谷县| 辽源市|