没有公司做网站可以吗,wordpress购物主题,镇江城乡建设网站首页,网站建设书本注#xff1a;内容参考学习 Leetcode 上的《C面试突破》
一、作用
用来声明类构造函数是显示调用的#xff0c;而非隐式调用#xff0c;可以阻止调用构造函数时进行隐式转换和赋值初始化。注意#xff1a;只可用于修饰单参构造函数#xff0c;因为无参构造函数和多参构…注内容参考学习 Leetcode 上的《C面试突破》
一、作用
用来声明类构造函数是显示调用的而非隐式调用可以阻止调用构造函数时进行隐式转换和赋值初始化。注意只可用于修饰单参构造函数因为无参构造函数和多参构造函数本身就是显式调用的再加上explicit关键字也没有意义。
二、例子
class A
{
public:A(int n){v n;}
private:int v;
};
int main(int argc, char *argv[])
{A a 10; //发生了隐式转换return 0;
}在上面例子中A a 10; 在编译时进行了隐式转换将10转换成A类型的对象然后将该对象赋值给a, 等同于以下代码
A tmp(10);
A a tmp;
为了避免隐式转换可用explicit 关键字进行声明
class A
{
public:explicit A(int n) //添加explicit关键字{v n;}
private:int v;
};
int main(int argc, char *argv[])
{A a 10; //此时提示编译错误error: C2440: “初始化”: 无法从“int”转换为“A”return 0;
} 三、总结 在日常使用中建议对单参构造函数使用explicit声明从而可以阻止编译器执行非预期的不安全的隐式转换从而避免一些意外错误的发生。