Быстрый вопрос: почему С++ 11 не предлагает "user-" (действительно, стандартную библиотеку) определенный литерал для создания std::string
, например
auto str = "hello world"s; // str is a std::string
Подобно С++, Objective-C поддерживает как строки C-стиля, так и более удобный для пользователя тип библиотеки NSString
; однако, в отличие от С++, никто никогда не путается между ними, потому что тривиально создавать NSString
путем префикса строкового литерала с помощью @
. На самом деле редко встречается код Objective-C, где литерал не имеет префикса @
. Все знают, что способ сделать это, использует NSString
и продолжает с ним.
С++ 11 пользовательских литералов разрешили бы это, и на самом деле раздел UDL в FAQ Stroustrup С++ 11 использует именно этот пример. Кроме того, UDL без предварительного подчеркивания зарезервированы, поэтому не было бы проблем в разрешении простого s
, как указано выше, - нет никакой возможности его столкновения с чем-либо еще.
Возможно, мне что-то не хватает, но похоже, что это было бы очень ценным и безрисковым дополнением к языку, так кто-нибудь знает, почему С++ 11 не предлагает его? Возможно, он появится в С++ 14?