Признаюсь, это я напутал. Пошел к Страуструпу сейчас на страничку. Он в самом деле просто объявляет а не определяет приватные функции. Надо будет посмотреть еще в книге.
How do we avoid this? The simplest solution is to prevent copying by making the operations that copy private:
class Handle {
private:
string name;
X* p;
Handle(const Handle&); // prevent copying
Handle& operator=(const Handle&);
public:
Handle(string n)
:name(n), p(0) { /* acquire the X called "name" and let p point to it */ }
~Handle() { delete p; /* release X called "name" */ }
// ...
};
void f(const string& hh)
{
Handle h1(hh);
Handle h2 = h1; // error (reported by compiler)
// ...
}
Здесь.
ОК>>>>operator T () const объявлен но не определен (может определили за пределами структуры но меня ломает лезть в статью).
N>>>Пропускают определение целенаправленно, так что тут всё корректно.
ОК>>Не думаю.
N>Это не вопрос для размышлений, это приём такой, старый и действенный.
Нелогичность тут, однако. Как поступит компилятор с просто объявленными (но неопределенными) public и protected функциями которые нигде не вызываются?
ОК>>>>Компилятор видимо пропустил.
N>>>Правильно сделал. Никогда не сталкивался с конструкцией вида:
N>>>N>>>private:
N>>>ClassName(ClassName const&);
N>>>ClassName& operator=(ClassName const&);
N>>>
N>>>?
ОК>>Ты путаешь немного, имхо. Страуструп когда объясняет такие конструкции все равно пишет пустые тела или какой-нибудь минимальный return а не просто объявления (как ты тут написал).
N>Не путаю, тут тот же случай. Реализация просто не нужна, поэтому во избежание ошибок и недоразумений её лучше не писать.
ОК>>>>Я бы написал operator T () const { return T(); } но это все мелочи.
N>>>Сделал бы лишнюю работу.
ОК>>Не думаю и не повредило бы.
N>Повредила бы. Лишний код, простор для ошибок.
ОК>>>>У меня вообще посыл был в том что это все ненужные навороты.
N>>>Когда всякие автогенераторы пишешь, парсеры, библиотеки и т.п. подобные вещи необходимы и сильно уменьшают время разработки.
ОК>>-1. Ненужный код и
N>Ты только что рассказывал как ты лишний код пишешь
Вообще-то, повторюсь, я бы такие навороты не стал писать в первую очередь.
ОК>>ненужная дополнительная complexity.
N>При профессиональном подходе — наоборот. Введение локальной сложности сильно упрощает систему в целом. Многократно проверено.
Ты, видимо, мало поддерживал кода написанного другими с таким же мнением как и у тебя.