gpt4 book ai didi

c++ - 显式关键字是什么意思?

转载 作者:bug小助手 更新时间:2023-10-28 01:29:44 27 4
gpt4 key购买 nike

explicit关键字在C++中是什么意思?

最佳答案

允许编译器进行一次隐式转换以将参数解析为函数。这意味着编译器可以使用可通过单个参数调用的构造函数从一种类型转换为另一种类型,以便为参数获取正确的类型。

这是一个带有构造函数的示例类,可用于隐式转换:

class Foo
{
private:
int m_foo;

public:
// single parameter constructor, can be used as an implicit conversion
Foo (int foo) : m_foo (foo) {}

int GetFoo () { return m_foo; }
};

这是一个接受 Foo 对象的简单函数:

void DoBar (Foo foo)
{
int i = foo.GetFoo ();
}

这里是调用 DoBar 函数的地方:

int main ()
{
DoBar (42);
}

参数不是 Foo 对象,而是 int。但是,Foo 存在一个构造函数,它采用 int,因此可以使用此构造函数将参数转换为正确的类型。

允许编译器对每个参数执行一次。

在构造函数前添加 explicit 关键字可防止编译器使用该构造函数进行隐式转换。将其添加到上述类中会在函数调用 DoBar (42) 处产生编译器错误。现在需要使用 DoBar (Foo (42))

显式调用转换

您可能希望这样做的原因是避免可能隐藏错误的意外构造。
人为的例子:

  • 你有一个 MyString 类,它有一个构造函数,可以构造一个给定大小的字符串。你有一个函数 print(const MyString&) (以及一个重载 print (char *string)),你调用 print(3)(当您实际上打算调用print("3")时)。您希望它打印“3”,但它会打印一个长度为 3 的空字符串。

关于c++ - 显式关键字是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/121162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com