Здравствуйте, rg45, Вы писали:
M>>Есть свой класс, он реализован так, что ведёт себя как интегральный тип.
R>Так заведение оператора приведения к интегральному типу — это как индикатор того, что декларируемая цель не достигнута.
Ну почему? У меня есть функция, принимающая int, например. При вызове этой функции вычисляется какое-то выражение. Я хочу сменить используемый в выражении тип с интегрального на свой MyInt. При отсутствии неявного operator int мне надо будет переписать выражение, добавив явный каст к интегральному типу. Это может иногда быть просто невозможно, в каких-нибудь чужих шаблонах.
R>С опереторами неявного приведения можно огрести таких сюрпризов, котрые нарочно и не придумаешь. Я считаю, что такой оператор — это какой-то очень редкий исключительный случай. И если у тебя нет уверенности. что этот тот самый случай (а у тебя её нет, насколько я могу судить), то лучше этого не делать.
А можно примеры сюрпризов? Вот с приведением к bool через void* сюрпризы бывали, и для этого добавили explicit operator bool, но, не смотря на ключевое слово explicit, это работает без явного преобразования к bool в контексте условных операторов.