почему конструкторы не являются явными по умолчанию? - PullRequest
14 голосов
/ 05 января 2011

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

не предназначенные неявные конструкторы открывают использование (ошибочного) неявного преобразования, например как здесь . это может произойти случайно или нарушить обратную совместимость

так почему "явное" не является характеристикой по умолчанию для конструктора, если это приведет к уменьшению количества ошибок?

p.s. да, я читал Страуструпа "Дизайн и эволюция C ++", просто не помню, говорит ли он что-нибудь о "явном" там

Ответы [ 3 ]

14 голосов
/ 05 января 2011

Обратная совместимость в то время, когда было добавлено явное.Язык развивался, и изменение значения существующих конструкций на развивающемся языке - верный способ разозлить ваших пользователей.Сейчас дело обстоит именно так: обратная совместимость является чем-то высоким в уме комитета.

9 голосов
/ 05 января 2011

Потому что, когда C ++ был задуман, считалось, что никто не будет писать глупый код, и все будут наслаждаться преимуществами, которые принесут хорошие неявные преобразования, избегая необходимости писать повсюду.

Конечно, это оказалось ложным, и действительно есть глючные конструкторы повсюду . Такой позор.

3 голосов
/ 05 января 2011

Интересная точка зрения. Я бы предпочел перейти на другую сторону и удивиться, почему вы думаете, что вам нужно пометить все ваши конструкторы explicit, пока не доказано обратное?

Честно говоря, я не знаю ответа на ваш вопрос, если он вообще есть. Обратная совместимость выглядит так, как будто она может быть претендентом по наиболее вероятной причине, но опять же: почему вы хотите предотвратить неявное преобразование?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...