Почему нет стандартного буквального суффикса для std :: string?

Быстрый вопрос: почему C ++ 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 в C ++ 11 FAQ Страуструпа использует именно этот пример. Кроме того, UDL без начального подчеркивания зарезервированы, поэтому не было бы проблем с разрешением простого s как выше — нет никакой возможности столкновения с чем-либо еще.

Возможно, я что-то упускаю, но кажется, что это было бы очень ценным и безрисковым дополнением к языку, поэтому кто-нибудь знает, почему C ++ 11 этого не предлагает? Это вероятно появится в C ++ 14?

11

Решение

Пользовательские литералы были достаточно новыми в C ++ 11, чтобы их не включать, но они есть в C ++ 14 (в §21.7, на случай, если кому-то все равно). И да, он использует s как суффикс. Точный тип результата зависит от типа самого строкового литерала — «узкий» литерал дает std::stringБуква U16 дает u16stringи литерал u32 дает u32string, О, и да, если вы настаиваете на использовании широкого строкового литерала, это приведет к wstring,

Обратите внимание, что s суффикс также используется для обозначения секунд (определяется в <chrono>) но между двумя нет реального конфликтаs на строковом литерале означает строку, и s на число означает секунды.

20

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]