中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中explicit關鍵字怎么用

發布時間:2021-12-24 11:33:58 來源:億速云 閱讀:142 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關C++中explicit關鍵字怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1 隱式轉換

C++ 構造函數默認類型為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)

上面的使用方式都會默認調用相應的構造函數實現對象的初始化,以CString str5=6為例,在對對象進行實例化的過程中主要進行了如下操作:

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

2 顯示轉換

在構造函數上使用了explicit關鍵字后,通過構造函數進行對象實例化時需要進行顯示類型轉化。否則將會報錯。

依舊以上面的代碼為例:

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);  
    }
};

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

C++中explicit關鍵字怎么用

通過運行結果可以說明:explicit關鍵字可以防止構造函數進行隱式自動轉換

3 再次拆解

explicit關鍵字只對構造函數有一個參數的形式有效,如果構造函數有多個參數時explicit的功能也將失效,但是C++也提供了一種例外,既如果構造函數的其他參數都有默認值及時參數個數大于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;
}

如代碼所示,編譯時將會報錯,報錯內容為:

C++中explicit關鍵字怎么用

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

按照顯示類型轉換的方式進行處理,如:

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

將explicit關鍵字去掉,允許構造函數進行隱式轉換數據類型,如:

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

感謝各位的閱讀!關于“C++中explicit關鍵字怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

承德市| 黄浦区| 辽中县| 汕头市| 中西区| 历史| 台山市| 洪雅县| 合阳县| 海口市| 樟树市| 壶关县| 灵武市| 松阳县| 白沙| 定陶县| 昭通市| 大同县| 永胜县| 济南市| 扶风县| 柘城县| 南部县| 玛纳斯县| 乐亭县| 西丰县| 曲沃县| 枣庄市| 吴江市| 密山市| 广宗县| 图片| 冷水江市| 罗定市| 成武县| 泗洪县| 西和县| 罗田县| 邹平县| 手游| 九龙坡区|