explicit关键字
时间: 2023-08-11 18:55:37 浏览: 127
explicit关键字是在C++中用于修饰某个构造函数,它的作用是禁止编译器进行隐式类型转换。当一个构造函数被声明为explicit时,只能通过显式的方式调用该构造函数来创建对象,而不能通过隐式类型转换来创建对象。
举个例子,假设有一个类A,它有一个带有一个参数的构造函数。如果该构造函数没有被声明为explicit,则可以在某些情况下进行隐式类型转换,例如将int类型的值传递给该构造函数,编译器会自动将int类型转换为A类型。但是如果该构造函数被声明为explicit,则必须显式地调用构造函数来创建A对象。
```cpp
class A {
public:
explicit A(int value) {
// 构造函数的实现
}
};
int main() {
A obj1(10); // 正确,通过显式调用构造函数创建对象
A obj2 = 20; // 错误,不能进行隐式类型转换
A obj3 = A(30); // 正确,通过显式调用构造函数创建对象
return 0;
}
```
在上面的例子中,obj1的创建是正确的,因为我们显式地调用了A的构造函数来创建对象。而obj2的创建是错误的,因为它尝试进行隐式类型转换。obj3的创建也是正确的,虽然使用了拷贝构造函数,但是仍然是显式地调用了构造函数。
相关问题
explicit 关键字
在 C++ 中,explicit 是一个关键字,用于修饰构造函数,它的作用是禁止隐式转换。如果一个构造函数被声明为 explicit,那么它就不能在隐式转换中使用,只能用于显式地创建对象。这样可以避免一些不必要的类型转换,提高程序的安全性和可读性。例如:
```c++
class A {
public:
explicit A(int x) { ... }
};
void func(A a) { ... }
int main() {
A obj(1); // 正确,显式调用构造函数
A obj2 = 2; // 错误,不能进行隐式转换
func(3); // 错误,不能进行隐式转换
func(A(3)); // 正确,显式调用构造函数
return 0;
}
```
C++ explicit 关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的。如果一个类构造函数被explicit修饰,那么它就不能被用于隐式转换,只能被用于显式转换。如果一个类构造函数没有被explicit修饰,那么它就可以被用于隐式转换。需要注意的是,explicit关键字只对有一个参数的类构造函数有效,如果类构造函数参数大于或等于两个时,是不会产生隐式转换的,所以explicit关键字也就无效了。
阅读全文