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

同じですか?それらは両方ともコピーコンストラクターをトリガーしますか? どちらもコピーコンストラクターをトリガーすると言う人もいます。しかし、最初のものはトリガーを省略しますよね?

4

2 に答える 2

0

C++ が標準を定義しているかどうかはわかりませんが、現在のコンパイラがそれをどのように行っているかを把握する方法があります。

以下の CTest で次のテストを実行します

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

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

CTest クラス:

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)
于 2013-04-26T03:10:16.253 に答える
-1
string str=string("123");
string str="123";

どちらの例でも、コピー コンストラクターを使用しています。

于 2013-04-26T02:51:29.213 に答える