С++ 11 представляет пользовательские литералы что позволит ввести новый литерал-синтаксис на основе существующих литералов (int, hex, string, float), чтобы любой тип мог иметь литеральное представление.
<сильные > Примеры:
// imaginary numbers
std::complex<long double> operator "" _i(long double d) // cooked form
{ 
    return std::complex<long double>(0, d); 
}
auto val = 3.14_i; // val = complex<long double>(0, 3.14)
// binary values
int operator "" _B(const char*); // raw form
int answer = 101010_B; // answer = 42
// std::string
std::string operator "" _s(const char* str, size_t /*length*/) 
{ 
    return std::string(str); 
}
auto hi = "hello"_s + " world"; // + works, "hello"_s is a string not a pointer
// units
assert(1_kg == 2.2_lb); // give or take 0.00462262 pounds
На первый взгляд это выглядит очень круто, но мне интересно, насколько это применимо, когда я пытался подумать о том, что суффиксы _AD и _BC создают даты, которые я обнаружил, что это проблема из-за порядка оператора. 1974/01/06_AD сначала оценил бы 1974/01 (как обычный int s), а только позже 06_AD (не говоря уже о августе и сентябре, которые должны быть записаны без 0 по восьмеричным причинам). Это можно обойти, если синтаксис будет 1974-1/6_AD, так что порядок оценки оператора работает, но он неуклюж.
Итак, что мой вопрос сводится к этому, чувствуете ли вы, что эта функция оправдает себя? Какие другие литералы вы хотели бы определить, что сделает ваш код на С++ более удобочитаемым?
Обновлен синтаксис, чтобы он соответствовал окончательному проекту в июне 2011 года.
