Очень легко забыть пометить конструктор как «явный»: добавление / удаление аргументов, создание их необязательных и т. Д. Единственный надежный способ, который я знаю, - это объявить каждый конструктор как явный, а затем удалить это ключевое слово, только если дизайн (благодаря стандарту, который позволяет это не только для конструкторов с одним аргументом). Но это будет выглядеть ужасно.
не предназначенные неявные конструкторы открывают использование (ошибочного) неявного преобразования, например как здесь . это может произойти случайно или нарушить обратную совместимость
так почему "явное" не является характеристикой по умолчанию для конструктора, если это приведет к уменьшению количества ошибок?
p.s. да, я читал Страуструпа "Дизайн и эволюция C ++", просто не помню, говорит ли он что-нибудь о "явном" там