explicit构造函数
所有的单参数的构造函数都必须是explicit的,以避免后台的类型转换。否则,一些宽松的规则将允许在没有显示类型转换操作的情况下进行类型转换。
A a;
a = 37;
上面的代码构造了一个A对象a,并进行赋值。该赋值语句不能正常工作,因为在赋值符号右侧并不是另一个A对象。
然而,C++拥有宽松的规则,通常,单参数构造函数定义了一个隐式类型转换(implicit type conversion),该转换创建了一个临时对象,从而使赋值(或函数参数)变成兼容的。
在本例中,编译器试图将a = 37;转换成A temp(37); a = temp;
临时对象的构造也可以通过使用单参数构造函数来实现。使用explicit意味着单参数构造函数不能用来创建隐式临时对象。
参数传递小结
- 按值调用适用于不被函数更改的小对象
- 按常量引用调用适用于不被函数更改的大对象
- 引址调用适用于所有可以被函数更改的对象
按常量引用返回
如果返回的对象是类类型,使用按常量引用返回可以节省复制的开销。这里的const是指返回的对象自身不能修改。
如果你想从常量成员函数中通过引用返回this对象的一个成员,你应该使用常量引用来返回它,即const X& 。也就是说你想通过引用返回的东西如果从逻辑上来讲是this对象的一部分(与它是否在物理上嵌入在th