C++中explicit的作用是什么

c++
小億
183
2023-12-26 22:24:00
欄目: 編程語言

在C++中,explicit關(guān)鍵字用于修飾單參數(shù)的構(gòu)造函數(shù),其作用是禁止隱式轉(zhuǎn)換。當(dāng)一個(gè)構(gòu)造函數(shù)被聲明為explicit時(shí),它只能被顯式地調(diào)用,不能隱式地轉(zhuǎn)換為其他類型。

使用explicit修飾構(gòu)造函數(shù)可以避免一些潛在的錯(cuò)誤和意外行為,確保類型轉(zhuǎn)換的顯式性和安全性。通過禁止隱式轉(zhuǎn)換,可以減少代碼中的歧義和誤解,提高代碼的可讀性和可維護(hù)性。

下面是一個(gè)使用explicit關(guān)鍵字的例子:

class MyClass {
public:
    explicit MyClass(int value) {
        // 構(gòu)造函數(shù)的實(shí)現(xiàn)
    }
};

void func(MyClass obj) {
    // 函數(shù)的實(shí)現(xiàn)
}

int main() {
    MyClass obj1(10); // 直接調(diào)用構(gòu)造函數(shù)
    MyClass obj2 = 20; // 錯(cuò)誤,禁止隱式轉(zhuǎn)換
    func(obj1); // 正確,顯式調(diào)用構(gòu)造函數(shù)
    func(30); // 錯(cuò)誤,禁止隱式轉(zhuǎn)換
    return 0;
}

在上面的例子中,使用explicit關(guān)鍵字修飾了MyClass的構(gòu)造函數(shù),禁止了隱式轉(zhuǎn)換。在main函數(shù)中,對(duì)于obj1的構(gòu)造是正確的,因?yàn)槭秋@式地調(diào)用了構(gòu)造函數(shù);而對(duì)于obj2和func(30)的構(gòu)造是錯(cuò)誤的,因?yàn)樗鼈冊(cè)噲D進(jìn)行隱式轉(zhuǎn)換,但被explicit關(guān)鍵字禁止了。

0