是否有一个代码示例触发器复制构造函数?

时间:2013-04-26 02:42:32

标签: c++

string str=string("123");
string str="123";

是一样的吗?他们都触发复制构造函数吗? 有人说他们都触发了复制构造函数。但是第一个会省略触发器,是不是?

2 个答案:

答案 0 :(得分:0)

我不知道C ++是否定义了标准,但是有一种方法可以弄清楚当前编译器是如何做到的。

在下面的CTest上运行以下测试

TRACE("T1 Start\n");
CTest t1 = CTest("test");

TRACE("T2 Start\n");
CTest t2 = "test";

CTest类:

可以用printf或其他调试跟踪功能替换TRACE。

class CTest
{
public:
    CTest(){
        TRACE("CTest()\n");
        m_pTest = NULL;
    }

    CTest(const char * pTest){
        TRACE("CTest(const char * pTest)\n");
        m_pTest = pTest;
    }

    CTest(CTest & test){
        TRACE("CTest(CTest & test)\n");
        m_pTest = test.m_pTest;
    }

    CTest & operator = (const CTest & test){
        TRACE("CTest & operator = (const CTest & test)\n");
        m_pTest = test.m_pTest;
        return *this;
    }

    CTest & operator = (const char * pTest){
        TRACE("CTest & operator = (const char * pTest)\n");
        m_pTest = pTest;
        return *this;
    }

    const char * m_pTest;
};

我目前的编译器(MSVC 2010)在两种情况下都直接调用构造函数。

T1 Start
CTest(const char * pTest)
T2 Start
CTest(const char * pTest)

答案 1 :(得分:-1)

string str=string("123");
string str="123";

两个示例都使用复制构造函数。