在C++中,explicit
关键字用于防止类构造函数的意外隐式转换。默认情况下,如果一个类的构造函数只有一个参数,那么C++编译器会允许使用这个构造函数进行隐式转换。
例如,假设我们有一个类Foo
,它有一个接受int
参数的构造函数:
class Foo {
public:
Foo(int x) { /* ... */ }
};
那么我们可以这样使用这个构造函数:
Foo foo = 42; // 隐式转换
这里,42
被隐式转换为Foo
类型。
然而,有时候我们不希望这种隐式转换发生。这时,我们可以使用explicit
关键字:
class Foo {
public:
explicit Foo(int x) { /* ... */ }
};
现在,上面的隐式转换代码会导致编译错误:
Foo foo = 42; // 编译错误:不能从 'int' 转换为 'Foo'
我们必须显式地调用构造函数:
Foo foo(42); // 正确
在你的代码中,explicit Foo(int x);
意味着Foo
的构造函数需要显式地接受一个int
类型的参数,不会发生隐式转换。