网站开发与设计期末考试,十大免费跨境app,西点培训班一般要多少学费,做微信公众平台的网站吗目录 〇、构造函数还具有类型转换的作用 一、explicit关键字是什么#xff1f; 二、为什么需要explicit关键字#xff1f; 三、怎么使用explicit关键字#xff1f; 【总结】 〇、构造函数还具有类型转换的作用 构造函数不仅可以构造与初始化对象#xff0c;对于只有一个参…目录 〇、构造函数还具有类型转换的作用 一、explicit关键字是什么 二、为什么需要explicit关键字 三、怎么使用explicit关键字 【总结】 〇、构造函数还具有类型转换的作用 构造函数不仅可以构造与初始化对象对于只有一个参数或只有第一个参数没有缺省值和全缺省的构造函数还具有类型转换的作用。 eg. 使用只有第一个参数没有缺省值的构造函数进行类型转换 实际编译器背后会用1构造一个无名对象最后调用拷贝构造函数用无名对象给a对象进行赋值。 一、explicit关键字是什么 explicit是C中的一个关键字它用来修饰只有一个参数的类构造函数以表明该构造函数是显式的而非隐式的。当使用explicit修饰构造函数时它将禁止类对象之间的隐式转换以及禁止隐式调用拷贝构造函数。 eg. Date2的构造函数被explicit修饰后无法隐式转换 这里实际上是禁用了编译器隐式调用拷贝构造函数。 eg. Date2的构造函数被explicit修饰后无法隐式转换显式地调用构造函数来创建对象 二、为什么需要explicit关键字 我们先如下代码是否有可能会认为Date1是经typedf重命名的内置类型、PrintDate函数的参数是内置类型 int main()
{Date1 b 1;PrintDate(1);return 0;
} 但实际上它是这样的 class Date1{
public:Date1(int m){minute m;}int minute;
};void PrintDate(const Date1 d){cout d.minute endl;
}int main()
{Date1 b 1;PrintDate(1);return 0;
} 这样的代码的可读性和可维护性无疑是很差的在多人合作的项目中极其容易引起误会。 如果上述代码使用了explicit关键字将构造函数声明为显式构造函数则编译器将不再进行隐式类型转换而会导致编译错误。这样可以避免一些意外的类型转换提高代码的可读性和可维护性。 总的来说explicit关键字的作用是确保类型转换的清晰和明确避免不必要的、可能引发错误的隐式转换。 三、怎么使用explicit关键字 explicit关键字在C中只能用于修饰类的构造函数它用来修饰只有一个参数的类构造函数以表明该构造函数是显式的而非隐式的。 只要在构造函数名前加上explicit就能禁止类对象之间的隐式转换、禁止隐式调用拷贝构造函数。 eg. explicit关键字只能用于修饰构造函数 【总结】 ------------------------END-------------------------
才疏学浅谬误难免欢迎各位批评指正。