在C++模板編程中,explicit關鍵字用于控制模板類中的構造函數是否可以被隱式轉換調用。通常情況下,當一個類有一個參數的構造函數時,該構造函數可以被隱式調用,這可能會導致一些意想不到的行為。使用explicit關鍵字可以禁止這種隱式調用,只允許顯式調用構造函數。
例如,如果一個類有一個參數的構造函數,并且使用了explicit關鍵字,那么只能用顯式的方式調用該構造函數。這樣可以避免一些潛在的問題,提高代碼的可讀性和安全性。
template <typename T>
class MyClass {
public:
explicit MyClass(T val) : value(val) {}
private:
T value;
};
int main() {
MyClass<int> obj1 = 10; // 編譯錯誤,禁止隱式調用構造函數
MyClass<int> obj2(20); // 正確,顯式調用構造函數
}