explicit用于修饰类的构造函数,表明该构造函数是显式的,
用于用户自定义类型的构造函数,制定它是默认的构造函数,不可用于转换构造函数。因为构造函数有三种,1 拷贝构造函数 2 转换构造函数 3 构造函数
当一个类存在多个构造函数时,explicit修饰的那个构造函数就是默认的。
class string{
private:
int size;
int capacity;
char* buff;
public:
string();
string(int size);
string(const char*);
~string();
};
int main(){
string s="Hello";
int ns=0;
s=1;
}
s=1,本来想ns=1,但是写错了,写成了s=1,因为有个构造函数是接受一个int类型的参数,所以会试着用string(1)去
解释它,为了避免类似的错误,我们会在前面加上explicit关键字,
explicit string(int size)
一个很好的例子:
class People{
public:
int age;
explicit People(int a){
age=a;
}
};
void foo(void){
People p1(10); //方式一
People* p_p2=new People(10);
People p3=10; //方式三,这个会报错,如果去掉explicit的话就不会报错。
}
gcc -S people.cpp
原文链接: https://www.cnblogs.com/zhanglanyun/archive/2011/12/29/2305947.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/39362
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!