Какие новые возможности пользовательские литералы добавляют в C ++?

C ++ 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 (как ясноints) и только позже06_AD (не говоря уже о августе и сентябре, которые должны быть написаны без0 по восьмеричным причинам). Это можно обойти, используя синтаксис1974-1/6_AD так что порядок оценки оператора работает, но он неуклюжий.

Итак, к чему сводится мой вопрос: считаете ли вы, что эта функция оправдает себя? Какие еще литералы вы хотели бы определить, чтобы сделать ваш код C ++ более читабельным?

Обновлен синтаксис для соответствия окончательному проекту в июне 2011 года

Ответы на вопрос(12)

Ваш ответ на вопрос