Возможно, это было для поддержки обслуживания.Используя explicit
в конструкторах с несколькими аргументами, можно избежать непреднамеренного введения неявных преобразований при добавлении значений по умолчанию к аргументам.Хотя я не верю этому;вместо этого я думаю, что в C ++ допускается множество вещей, чтобы просто не сделать определение языка более сложным, чем оно уже есть.
Возможно, самый печально известный случай - возвращение ссылки на не- static
локальная переменная.Потребовались бы дополнительные сложные правила, чтобы исключить все «бессмысленные» вещи, не затрагивая ничего другого.Так что это просто разрешено, получая UB, если вы используете эту ссылку.
Или для конструкторов, вы можете определить любое количество конструкторов по умолчанию, если их сигнатуры различаются, но с большим количествомчем один, довольно сложно иметь любой из них по умолчанию.: -)
Возможно, лучше задать вопрос, почему explicit
также не разрешен для операторов преобразования?
Что ж, так будет и в C ++ 0x.Так что не было веской причины, почему бы и нет.Фактическая причина, по которой нельзя разрешить explicit
операторам конверсии, может быть столь же прозаичной, как и надзор, или борьба за принятие explicit
, в первую очередь, или простая расстановка приоритетов времени комитета, или что-то еще.Приветствия & hth.,