zoukankan      html  css  js  c++  java
  • C++ 关键字explicit的使用场景

    假若我们定义了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:
            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;
    }

      


    博客地址:Zealot Yin

    欢迎转载,转载请注明出处[http://creator.cnblogs.com/]

  • 相关阅读:
    十:audio 音频
    八: 操作提示(wxml 即将废弃)
    九: 操作提示(js版本)
    七: 表单标签(3)
    四: 基本标签
    五: 表单标签(1)
    六: 表单标签(2)
    webservice和wcf和web.api简单介绍
    Qt 中事件与处理
    Qt 事件过滤器
  • 原文地址:https://www.cnblogs.com/Creator/p/2602354.html
Copyright © 2011-2022 走看看