c++ explicit
时间: 2024-03-13 17:38:53 浏览: 85
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的。如果一个构造函数被explicit关键字修饰,则该构造函数不能在隐式转换中使用,只能在显式转换中使用。这样可以避免一些不必要的类型转换,提高代码的安全性和可读性。
以下是一个使用explicit关键字的例子:
```c++
class Test {
public:
explicit Test(int num) {
this->num = num;
}
private:
int num;
};
void func(Test t) {
cout << t.getNum() << endl;
}
int main() {
Test t1 = 10; // 编译错误,不能进行隐式转换
Test t2(20); // 正确,使用显式转换
func(30); // 编译错误,不能进行隐式转换
func(Test(40)); // 正确,使用显式转换
return 0;
}
```
相关问题
C++ explicit
在C++中,explicit关键字只能用于修饰只有一个参数的类构造函数。它的作用是用来表明该构造函数是显示的,而非隐式的。在默认情况下,类构造函数是隐式声明的。使用explicit关键字可以防止隐式转换发生,只能通过显式调用来进行对象的创建。这样可以避免一些意外的类型转换,提高代码的安全性和可读性。
c++ explicit
explicit是C++中的关键字,表示显式的意思。explicit可以用于声明构造函数为显式构造函数,在使用该构造函数进行对象初始化时,必须要通过强制类型转换的方式进行。比如:
```c++
class MyClass{
public:
explicit MyClass(int num){
m_num = num;
}
private:
int m_num;
};
int main(){
MyClass obj1 = 1; //编译报错,不能隐式构造
MyClass obj2(1); //正常初始化
MyClass obj3 = MyClass(1); //强制类型转换,正常初始化
}
```
在上述代码中,我们定义了一个类MyClass,其中的构造函数用explicit进行了声明。当我们使用obj1对象进行初始化时,由于不能隐式构造,则会编译报错;而obj2和obj3则可以正常初始化。
使用explicit可以明确指定类型转换方式,避免意外的隐式类型转换造成的问题,提高代码的安全性和可读性。
阅读全文