Требуется ли CTOR для копирования, даже если он никогда не вызывается ?

учтите следующее:

class X {
public:
    X(int i) { cout << "X(int i)" << endl; }
    X(const X& x) { cout << "X(const X& x)" << endl; }
};

void main() {
    X x1(1);
    X x2 = X(1);
    X x3 = (X)1;
}

выполнение этого кода дает следующий результат:

X(int i)
X(int i)
X(int i)

Я думал, что все три вышеупомянутых оператора эквивалентны, поскольку копирующий CTOR никогда не вызывается. Однако изменение CTOR копии X на частный:

class X {
public:
    X(int i) { cout << "X(int i)" << endl; }
private:
    X(const X& x) { cout << "X(const X& x)" << endl; }
};

Не удалось скомпилировать (в Visual Studio 2010) с этой ошибкой:

cannot access private member declared in class 'X'

Таким образом, похоже, что CTOR копии каким-то образом задействован, хотя я Не совсем понимаю, как.

Спасибо

8
задан dankilman 10 June 2011 в 17:13
поделиться