explicit用来防止由构造函数定义的隐式转换。
至于意义和用法,举例说明,
现在有如下两个类:
class cxNoExplicit
{
int m_neInt;
public:
cxNoExplicit(){
m_neInt = 0;
}
cxNoExplicit(int neInt){
m_neInt = neInt;
}
};
class cxExplicit
{
int m_eInt;
public:
explicit cxExplicit(){
m_eInt = 0;
}
explicit cxExplicit(int eInt){
m_eInt = eInt
};分别对两个类进行构造:
cxNoExplicit noExp;
cxExplicit exp;
noExp = 1;
exp = 2;这时候 exp = 2 会报错,而noExp = 1 不会报错。
exp = 2;
首先会调用构造函数cxExplicit(int eInt);再调用默认的operator=。由于构造函数呗限制了explicit,所以不能进行隐式转换。编译器报错。
最后。
effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit
本文介绍了C++中explicit关键字的作用及使用方法。通过对比两个不同类的构造过程,解释了explicit如何阻止非预期的类型转换,并强调了在大多数情况下声明explicit构造函数的优势。
4713

被折叠的 条评论
为什么被折叠?



