string str=string("123");
string str="123";
是一样的吗?他们都触发复制构造函数吗? 有人说他们都触发了复制构造函数。但是第一个会省略触发器,是不是?
答案 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";
两个示例都使用复制构造函数。