假若我们定义了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'大小的内存空间
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/
也许调用者是希望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: int capacity; 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/]
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索编译
, char
, 空间
, 大小
, str
, explicit
explicit关键字
c explicit 关键字、explicit关键字、c 链表的使用场景、c explicit、c explicit 构造函数,以便于您获取更多的相关知识。
时间: 2024-12-21 23:57:32