通過在類構造函數前加上explicit關鍵字可以避免類構造函數的意外調用。explicit關鍵字告訴編譯器只允許顯式調用構造函數,不允許隱式調用構造函數。
例如:
class MyClass {
public:
explicit MyClass(int value) : mValue(value) {}
private:
int mValue;
};
void func(MyClass obj) {
// do something
}
int main() {
// MyClass obj = 10; // 錯誤,不能隱式調用構造函數
MyClass obj(10); // 正確,可以顯式調用構造函數
func(obj);
return 0;
}
在上面的例子中,構造函數MyClass(int value)
前加上了explicit關鍵字,因此不能隱式調用該構造函數。如果嘗試使用隱式調用構造函數的方式創建MyClass對象會導致編譯錯誤。