c – 显式关键字是什么意思?
作者:互联网
显式关键字在C中的含义是什么?
解决方法:
允许编译器进行一次隐式转换以将参数解析为函数.这意味着编译器可以使用可用单个参数调用的构造函数从一种类型转换为另一种类型,以便为参数获取正确的类型.
这是一个带有构造函数的示例类,可用于隐式转换:
class Foo
{
public:
// single parameter constructor, can be used as an implicit conversion
Foo (int foo) : m_foo (foo)
{
}
int GetFoo () { return m_foo; }
private:
int 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(int size)类,其构造函数构造给定大小的字符串.你有一个函数print(const MyString&),你调用print(3)(当你打算调用print(“3”)时).你希望它打印“3”,但它打印一个长度为3的空字符串.
标签:explicit,c,constructor,explicit-constructor,c-faq 来源: https://codeday.me/bug/20190911/1802666.html