C++ 14 включает стандартизированные литералы, среди прочего, std::string
и различные временные промежутки от заголовка <chrono>
.Почему не стандартные C++ 14 литералы в глобальном пространстве имен по умолчанию?
Для их использования вы должны указать using namespace std::literals;
(или некоторые варианты в зависимости от того, какие именно литералы вы хотите, так как они находятся во множестве встроенных пространств имен).
Все это хорошо, но мне любопытно, почему требуется декларация using
. UDL без лидирующего подчеркивания зарезервированы для реализации, поэтому нет никакой возможности, что "hello world"s
может когда-либо означать что-либо еще в стандартной программе.
Так почему же нет #include <string>
, достаточного для того, чтобы преобразовать литерную функцию преобразования в объем? Почему я должен явно включать литеральное пространство имен?
EDIT:N3531 самая последняя версия этого предложения я мог бы найти - к сожалению, это не обсуждается мотивация для сдачи вещей в пространстве имен, но только говорит:
можно суммировать требования [Портленд] обсуждение следующим образом:
- использование инлайн пространства имен для группы (связанной) UDL оператора (ов)
Возможно, по той же причине пользовательские литералы должны начинаться с '_': [forward compatibility] (http://en.wikipedia.org/wiki/Forward_compatibility). Они ожидают добавить больше литералов в какой-то момент в будущем, и я думаю, они помещают их в разные пространства имен, чтобы избежать конфликтов имен. – Cornstalks
@ Закрыть сообщение: Я очень сомневаюсь, что это мнение основано. Комитет по стандартам принял решение. Это спрашивает * почему * они приняли решение, которое они сделали. Это не основано на мнении.Это основано на исторических дискуссиях и решениях в комитете, которые на самом деле. – Cornstalks
«UDL без лидирующего подчеркивания зарезервированы для реализации» Где и в какой версии? –