练习定义了一下String类
String.h如下
其中赋值操作符重载函数的声明为:String& operator = (const String& str);
函数参数为String对象的常量引用。
main.cpp如下:
在第二行,我尝试给已经构造过的String对象赋值一个const char *
类型的字符串。
在我的构想中,我没有重载过函数为const char *
类型的赋值操作符,那么应该是要报错的。
但是没有,正常输出,并且赋值是成功了的
通过调试,我发现执行到赋值语句时,仍然跳到了我重载过的赋值操作符函数中去。请问这是什么道理???难不成自动将const char *
类型给我转换String类型了嘛??
想不通,请各位指教
经过很长时间后,在侯捷老师的面向对象课程中,我终于深刻理解了这个问题
要理解这个问题,还要去理解一下explicit关键字的作用
出现问题的原因就在于:non-explicit-one-argument ctor(没有explicit的单实参构造函数) 会在实参需要转为对应对象时自动转换。
取消这个特性的方法就是在构造函数前加上explicit关键字