C++关键字explicit

31 阅读1分钟

在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类型的参数,不会发生隐式转换。