c++ explicit
时间: 2023-06-05 15:47:25 浏览: 77
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可以明确指定类型转换方式,避免意外的隐式类型转换造成的问题,提高代码的安全性和可读性。
相关问题
c++ explicit
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修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的,即implicit。\[3\] explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的。\[2\] 在给对象赋值时,如果构造函数被explicit修饰,则需要使用显示的方式进行类型转换,而不能使用隐式的方式。\[2\]
#### 引用[.reference_title]
- *1* [C++中explicit的用法](https://blog.csdn.net/qq_35524916/article/details/58178072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [C++中的explicit详解](https://blog.csdn.net/k6604125/article/details/126524992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [C++中的explicit](https://blog.csdn.net/ArthurHai521/article/details/123166526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]