网站建设方案总结语,结婚网站模板,星子网易云,网页模板快速建站工具explicit关键字只能用来修饰构造函数。使用explicit可以禁止编译器自动调用拷贝初始化#xff0c;还可以禁止编译器对拷贝函数的参数进行隐式转换。 那么什么是隐式转换呢#xff1f;
类 命名 参数#xff1b; //有参构造类 命名 命名对象#xff1b; //拷贝构造#x… explicit关键字只能用来修饰构造函数。使用explicit可以禁止编译器自动调用拷贝初始化还可以禁止编译器对拷贝函数的参数进行隐式转换。 那么什么是隐式转换呢
类 命名 参数 //有参构造类 命名 命名对象 //拷贝构造构造之后在赋值
#includeiostreamusing namespace std;class Person {
public:Person(string name) {name name;cout 有参构造 endl;}Person(Person a) {name a.name;cout 拷贝构造 endl;}~Person() {};string name;
};int main() {string name nihao;Person p name;Person p2 p;return 0;
}运行结果
有参构造
拷贝构造通过让你的类进行隐式类型转化可以是有参构造也可以是拷贝构造。但是这种隐式转换在某些时候会出现问题。
void fun(Person p) {cout fun endl;
}int main() {string name nihao;fun(name);return 0;
}如果我在写一个这样的函数运行funname你觉得函数会报错吗
答案是no会输出fun。这是一个很让人不解的事情不过有了隐式转换的知识不难理解这是因为name触发了Person的有参构造最后成功调用fun。这种写法很让人误解所以在大型项目或者项目合作中建议在不需要隐式转换的情况下尽量使用explicit关键字。 老规矩有用二连支持一下