Re[11]: Почему нельзя писать void ctor();
От: CRT  
Дата: 27.04.17 07:42
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, CRT, Вы писали:


CRT>>Поэтому это не очевидно — то есть непонятно на первый взгляд — в таком синтаксисе, что

CRT>>
CRT>>A obj=A(1024);
CRT>>

CRT>>равно
CRT>>
CRT>>A obj(1024);
CRT>>


E>А они и не равны...


E>Попробуй скомпилировать...
E>class A {
E>    A(const A&);
E>public:
E>    int Data;
E>    A(int i = 0) : Data(i) {}
E>};

E>A obj = A(1024);

E>По С++ компилятор в такой штуке имеет право выбрасывать конструктор копии, так же, как и при RVO/NRVO, но не имеет права не проверять его доступность...

А зачем мне компилировать такое? И что оно вообще значит? То есть класс в котором объявлен но не определен конструктор копирования.
Но я попробовал скомпилировать. Ничего особого не произошло. Вызвался конструктор A(int). То есть я вижу что код A obj = A(1024); отработал так же как A obj(1024). Значит, делают вывод — равны.

Поправочка: в том что я попробовал A(const A&) был после паблик, а если его в private засунуть то не компилируется. Нужен конструктор копирования. Но с практической точки зрения. С точки зрения того, что делает программа, когда выполняется, все равно получается что A obj = A(1024) равно A obj(1024).
Отредактировано 27.04.2017 7:47 CRT . Предыдущая версия . Еще …
Отредактировано 27.04.2017 7:45 CRT . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.