c++ explicit的作用

2024-12-31 14:16:28
推荐回答(2个)
回答1:

简单说就是用在构造函数前面 禁止隐式类型转换
比如class cls
{
explicit cls(int i)
{...}
};
另外有一个函数
void f(cls obj)
{
...
}
int i=0;
这时候调用f(i)就是错误的
没有explicit的话就可以用i隐式建立一个对象
这样做(显示调用构造函数)就是对的:cls obj(i);

回答2:

This keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object.
用于用户自定义类型的构造函数,指定它是默认的构造函数,不可用于转换构造函数.因为构造函数有三种:1拷贝构造函数2转换构造函数3一般的构造函数(我自己的术语^_^)
另:如果一个类或结构存在多个构造函数时,explicit 修饰的那个构造函数就是默认的