explicit构造函数
class IntCell
{
public:
explicit IntCell(int initialValue=0):storedValue(initialValue){}
private:
int storeValue;
};
所有的单参数的构造函数都必须是explicit的,以避免后台的类型转换。否则,一些宽松的规则将允许在没有显示类型转换操作的情况下进行类型转换。通常,这种不希望发生的行为会破坏代码的可读性,并导致难以发现的错误。
考虑以下例子:
IntCell obj;
obj=37;
在C++中,单参数构造函数定义了一个隐式类型转换,改转换创建了一个临时对象,从而使赋值变成了兼容,例如:
IntCell temporary =37;
obj=temporary;
注意,临时对象的构造也可以通过使用单参数构造函数来实现。使用explicit意味着单参数构造函数不能用来创建隐式临时对象。
常量成员函数
class IntCell
{
public:
explicit IntCell(int initialValue=0):storedValue(initialValue){};
int read() const{return storedValue};
private:
int storedValue;
};
在C++中,每个成员函数都被标识为访问函数或修改函数。在设计阶段,这是很重要的一步,不可以被简单的看成注释。例如,访问函数不能用于常量对象。默认情况下,所有成员函数都是修改函数,要使成员函数成为访问函数必须在参数类型列表结尾的圆括号后加上关键字const。
如果成员函数标记为访问函数但在实现又去改变数据成员的值,那么就会出现编译错误。
原文链接: https://www.cnblogs.com/welkinwalker/archive/2011/11/18/2254631.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/36718
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!