Вероятно, время играет роль в этом решении. Ref-квалифицированные функции-члены были добавлены в язык с C ++ 11, в то время как std::string
существует с C ++ 98. Изменение определения чего-либо в стандартной библиотеке не является чем-то легким, поскольку это может привести к ненужному нарушению существующего кода. Это не та ситуация, когда нужно смотреть исключительно на то, почему это странное назначение должно быть разрешено (то есть искать сценарий использования). Скорее следует также взглянуть на то, почему это странное назначение следует запретить (то есть посмотреть на преимущества и взвесить их против потенциальной боли, когда в противном случае рабочий код нарушается). Как часто это изменение будет иметь значение для реализации c сценария кодирования ios?
Глядя на комментарии, счетчик одного предложенного варианта использования был "Они могли бы просто [другой подход] " Да, они могли, но что, если они не сделали? Предложение альтернатив является продуктивным при первоначальном проектировании конструкции (std::string
). Однако, когда структура широко используется, вы должны учитывать существующий код, который в настоящее время не использует альтернативу. Достаточно ли пользы от боли, которую вы можете причинить? Будет ли это изменение на самом деле ловить ошибки достаточно часто? Насколько распространены такие ошибки в ситуациях, когда другое предупреждение не будет вызвано? (Например, использование присваивания вместо равенства в условном выражении if
, скорее всего, уже сгенерирует предупреждение.) Это некоторые вопросы, с которыми сталкиваются разработчики языка.
Пожалуйста, поймите, что я не говорю, что изменение не может быть сделано, только то, что оно должно быть тщательно продумано.