string str=string("123");
string str="123";
一样吗?他们都触发了复制构造函数吗?有人说它们都触发了复制构造函数。但是第一个会省略触发器,对吗?
string str=string("123");
string str="123";
一样吗?他们都触发了复制构造函数吗?有人说它们都触发了复制构造函数。但是第一个会省略触发器,对吗?
我不知道 C++ 是否定义了一个标准,但是有一种方法可以弄清楚你当前的编译器是如何做到的。
在下面的 CTest 上运行以下测试
TRACE("T1 Start\n");
CTest t1 = CTest("test");
TRACE("T2 Start\n");
CTest t2 = "test";
测试类:
TRACE 可以替换为 printf 或其他调试跟踪函数。
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)
string str=string("123");
string str="123";
这两个示例都使用了复制构造函数。