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