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