c++ explicit的含义和用法

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

posted @ 2011-12-29 13:01  张兰云  阅读(6617)  评论(0编辑  收藏  举报