C++不同类型转换--1https://developer.aliyun.com/article/1424634
explicit关键字:
explicit关键字可以防止自定义类型中构造函数的隐式类型转换。因为自定义类型的隐式转换发生在构造函数中,所以只需用 explicit 修饰构造函数防止这种转换。
class Date { public: explicit Date(int year = 2023, int month = 10, int day = 16) : _year(year) , _month(month) , _day(day) { } private: int _year; int _month; int _day; }; int main() { //有了关键字explicit,下面的转换都不能实现 //Date d1 = 5; //Date d2 = { 1,2,3 }; //Date d3 = (1, 2, 3); Date d1(5);//类似于此种的方式没有设计隐式类型的转换,可以使用 return 0; }
强制类型转换:
强制类型转换的效果比较强,explicit关键字限制不了强制类型转换。这里要说明的是强制类型转换必须跟一个表达式,因此,强制类型转换只能完成一个参数的转换。
#include <iostream> using namespace std; class Date { public: explicit Date(int year = 2023, int month = 10, int day = 16) : _year(year) , _month(month) , _day(day) { } void Print() { cout << _year << "/" << _month << "/" << _day << endl; } private: int _year; int _month;