Какие пользовательские литералы предопределены стандартом? - PullRequest
10 голосов
/ 21 марта 2011

Мой вопрос звучит как противоречие, но я не знаю, как еще ссылаться на новый синтаксис литералов, кроме user-defined-literal.

std::string operator "" s ( const char* str, size_t len )
{
   return std::string( str, len );
}

assert( "foo"s == "bar"s );

Я помню, что слышал, что пользовательские литералы должны начинаться с_ префикс.Это будет означать, что библиотека определяет некоторые литералы без префикса для нас.

Предоставляет ли стандарт некоторые UDL в стандартной библиотеке?
Если да, то что они?

Ответы [ 4 ]

6 голосов
/ 21 марта 2011

Стандартная библиотека фактически определяет нет пользовательских литералов.Возможно, мы ожидали бы комплексных чисел, но нет.

С другой стороны, есть также предложение удалить их снова

http://www.open -std.org / jtc1 /sc22 / wg21 / docs /apers / 2011 / n3250.html

, поэтому мы пока не знаем, что произойдет.

5 голосов
/ 21 марта 2011

В языке уже используются суффиксы регулярных литералов, например 1U.

Если вы будете использовать U в качестве пользовательского литерала, это станет неоднозначным, таким образом, рекомендация.

целочисленный суффикс : u, U, l, L, ll, LL

плавающий суффикс : f, F, l, L

2 голосов
/ 16 апреля 2011

В отличие от ответа @ Матье, FIDS говорит следующее в 2.14.8 [lex.ext] p1:

Если токен соответствует определяемому пользователем литералу и другому литеральному виду, он рассматривается как последний.
[ Пример: 123_km является определяемым пользователем литералом , но 12LL является целочисленным литералом . - конец примера ]

Таким образом, даже если вы определите эти литералы, предопределенные будут взяты, и двусмысленности не будет.

1 голос
/ 26 октября 2011

Ни одна стандартная библиотека не поставила заявку на определенный пользователем литерал. @ Упомянул комплекс как возможность.

Еще один битсет:

template<char... Bits>
  inline constexpr std::bitset<sizeof...(Bits)>
  operator"" bits()
  {
    return std::bitset<sizeof...(Bits)>((char []){Bits..., '\0'});
  }

Я предполагаю, что в грядущих усовершенствованиях библиотеки TR2 будут предложения по буквальным операторам для различных компонентов библиотеки.

Я ожидаю столкновения в пространстве имен суффиксов. Вы можете объявлять литеральные операторы в пространстве имен и предотвращать множественные неоднозначные определения, но вы не можете различить фактические суффиксы по пространству имен в реальном литерале. Посмотрим.

...