C++只有explicit关键字,没有implicit关键字

explicit 修饰符可添加在单参构造函数或多参构造但具有默认参数而能够完成“单参构造”的构造函数前可以防止隐式类型转换!!!

测试用例

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

class CXString
{
public:

    CXString()
    {}

    explicit CXString(char* pch)
    {
        m_pBuf = new char[512];
        data(pch);
    }
    explicit CXString(char* pch, int size=0)
    {
        m_pBuf = new char[512];
        data(pch);
    }
    ~CXString()
    {
        if (m_pBuf)
        {
            delete [] m_pBuf;
        }
    }
    void data(char* pch)
    {
        if (pch && m_pBuf)
        {
            int size = strlen(pch) > 512 ? 512 : strlen(pch);
            memcpy(m_pBuf, pch, size);
        }
    }
    char* data()
    {
        return m_pBuf;
    }
private:
    char* m_pBuf;
};

int main()
{
    char acBuf[] = "The quick brown fox jumps over the lazy dog.";

    CXString s0 ( acBuf);
    CXString s1;// = acBuf;  /*此处不能使用CXString s1 = acBuf; 因为这时候需要单参构造函数 CXString(char* pch)的隐式类型转换*/
    s1 = CXString(acBuf); /*explicit关键字要求必须这样的显示类型转换*/

    CXString s4;
    CXString s5(acBuf);
    CXString s6(acBuf, 5);


    char acLastword[32] = "";
    //snprintf(acLastword, sizeof(acLastword) / sizeof(char), "pointer[%X] ", s0.data());
    sprintf(acLastword, "pointer[0x%X] ", s6.data());
    cout << "s6 inner buffer: " << acLastword << "data:" << s6.data() << endl;

    return 0;
}




posted on 2017-09-14 11:33  來時的路  阅读(204)  评论(0编辑  收藏  举报