Сообщение Re[11]: Почему нельзя писать void ctor(); от 27.04.2017 7:42
Изменено 27.04.2017 7:47 CRT
Re[11]: Почему нельзя писать void ctor();
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, CRT, Вы писали:
CRT>>Поэтому это не очевидно — то есть непонятно на первый взгляд — в таком синтаксисе, что
CRT>>
CRT>>равно
CRT>>
E>А они и не равны...
E>Попробуй скомпилировать...
E>По С++ компилятор в такой штуке имеет право выбрасывать конструктор копии, так же, как и при RVO/NRVO, но не имеет права не проверять его доступность...
А зачем мне компилировать такое? И что оно вообще значит? То есть класс в котором объявлен но не определен конструктор копирования.
Но я попробовал скомпилировать. Ничего особого не произошло. Вызвался конструктор A(int). То есть я вижу что код A obj = A(1024); отработал так же как A obj(1024). Значит, делают вывод — равны.
Поправочка: в том что я попробовал A(const A&); был после паблик, а если его в private то не компилируется. Нужен конструктор копирования. Но с практической точки зрения. С точки зрения того что делает программа, когда выполняется, все равно получается что A obj = A(1024); равно A obj(1024).
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).
Re[11]: Почему нельзя писать void ctor();
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, CRT, Вы писали:
CRT>>Поэтому это не очевидно — то есть непонятно на первый взгляд — в таком синтаксисе, что
CRT>>
CRT>>равно
CRT>>
E>А они и не равны...
E>Попробуй скомпилировать...
E>По С++ компилятор в такой штуке имеет право выбрасывать конструктор копии, так же, как и при RVO/NRVO, но не имеет права не проверять его доступность...
А зачем мне компилировать такое? И что оно вообще значит? То есть класс в котором объявлен но не определен конструктор копирования.
Но я попробовал скомпилировать. Ничего особого не произошло. Вызвался конструктор A(int). То есть я вижу что код A obj = A(1024); отработал так же как A obj(1024). Значит, делают вывод — равны.
Поправочка: в том что я попробовал A(const A&) был после паблик, а если его в private засунуть то не компилируется. Нужен конструктор копирования. Но с практической точки зрения. С точки зрения того, что делает программа, когда выполняется, все равно получается что A obj = A(1024) равно A obj(1024).
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).