Re: implicit operator bool
От: rg45 СССР  
Дата: 16.03.24 01:01
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Есть флаговый enum, для него определены все бинарные операции, возвращают тот же enum.


M>Я пока не делал operator bool, мало ли что вылезет.


А как ты собираешься сделать оператор bool для перечисления? Его ведь можно сделать только как функцию-член.

M>Но, в условных операторах уже устал писать ==0 / !=0.


Если условный оператор понимает конструкции if(x==0) и if(!=0), значит enum обычный, unscoped, а значит, услоный оператор так же точно способен понять и конструкции if(x) и if(!x) и никаких операторов для этого определять не нужно.

M>На какие грабли можно нарваться?


Да грабли могут быть самые разноообразные. Вот из недавнего, например. Был у нас чудо-юдо-супер-говно класс, написанный хрен знает когда для якобы эффективной работы со всякими строками. Объекты этого класса часто использовались в качестве ключей ассоциативных контейнеров. Для этих целей в этом классе был определены операторы сравнения (обычные). И вот, настало время переходить на C++20. Ну, попыхтели-попыхтели и перешли. И, как потом выяснилось, все ассоциативные контейнеры в новой реализации стандартной библиотеке используют уже новый spaceship оператор <=>. Такого оператора в этом классе, конечно же, не было. Зато в этом классе были определены операторы неявного преобразования к char* и const char*, для которых (внезапно) оператор <=> определен. Ну вот эти операторы преобразования и подхватились. И пошло сравнение голых указателей, вместо сравнения содержимого строк. И ведь все успешно откомпилировалось, а ошибку ловили уже в рантайме. А, как известно, чем дурнее ошибка, тем дольше ты ее будешь ловить. И это лишь единичный пример, а вообще, это очень западлистая штука, эти неявные преобразования. И никакой фантазии не хватит, чтоб представить, во что это счастье может вылиться.
--
Отредактировано 16.03.2024 1:03 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.