C++的explicit关键字的使用场景2014-11-11假若我们定义了Str类如下结构
class Str{ public: Str(int n) Str(const char* p) ..... }
可以使用如下方式来构建一个对象
Str c(12);Str d=Str(20);Str *z=new Str(21);Str a=10;//此处构建10个大小的空间Str b="abcd";//此处构建特定字符串大小空间Str f="f"; //与设计不相符的构建方式,这里会构建(int)"f"大小的内存空间
也许调用者是希望Str存"f"这一个字符,尽管Str没有提供这样的接口,但是编译的时候并不会报错,因为这里存在隐式转换,将char型转换为 Int型,这样就与调用者的初衷不符合了。而使用explicit可以杜绝这种隐式转换,在编译的时候就不会让其通过。可见explicit对于写一些基础库供他人调用还是非常有必要的.代码:
#include<iostream>using namespace std;class Str{public:/*explicit*/Str(int n)//try explicit here{capacity=n;getmem();}Str(const char* p){capacity=strlen(p)+1;getmem();strcpy(strarr,p);}~Str(){if(strarr!=NULL)free(strarr);}void printfvalue(){cout<<"len:"<<capacity<<"str:"<<strarr<<endl;}private:void getmem(){strarr=(char*)malloc(sizeof(char)*capacity);}private:intcapacity;char *strarr;};int main(){Str c(12);Str d=Str(20);Str *z=new Str(21);Str a=10;Str b="abcd";Str f="f";c.printfvalue();d.printfvalue();z->printfvalue();a.printfvalue();b.printfvalue();f.printfvalue();return 1;}
出处[http://creator.cnblogs.com/]