c++中explicit
时间: 2023-11-11 20:47:02 浏览: 40
在 C 语言中,`explicit` 是一个关键字,用于修饰类的构造函数。通过使用 `explicit` 关键字,可以禁止隐式转换调用构造函数。当一个构造函数被声明为 `explicit` 时,只能通过显式地调用构造函数来创建对象,而不能通过隐式转换。
例如:
```c
#include <stdio.h>
typedef struct {
int value;
} MyType;
// 非 explicit 构造函数
MyType createMyType(int value) {
MyType obj;
obj.value = value;
return obj;
}
// explicit 构造函数
explicit MyType createMyTypeExplicit(int value) {
MyType obj;
obj.value = value;
return obj;
}
int main() {
MyType obj1 = createMyType(10); // 隐式转换调用构造函数
MyType obj2 = createMyTypeExplicit(20); // 显式调用构造函数
printf("obj1: %d\n", obj1.value);
printf("obj2: %d\n", obj2.value);
return 0;
}
```
在上面的示例中,`createMyType` 是一个非 explicit 的构造函数,因此可以通过隐式转换来创建 `MyType` 对象。而 `createMyTypeExplicit` 是一个 explicit 的构造函数,只能通过显式调用来创建对象。