#cpp
В общем вопрос в заголовке, что за перегружаемый(если уместно применить к этому слово перегружаемый) оператор "" и зачем он используется? long double operator "" _w(long double); std::stringoperator "" _w (const char16_t* , std::size_t) ; unsigned operator "" _w(const char*); int main { 1.2_w; // вызов operator " " _w (1.2L) u"one"_w; // вызов operator "" _w (u"one", 3) 12_w; // вызов operator " " _w ("12") "two"_w; // ошибка: нет применимой литеральной операции }
Ответы
Ответ 1
Приведу пример, для чего это может быть использовано: constexpr unsigned long long operator"" _kb ( unsigned long long _bytes) { return _bytes * 1024; } constexpr unsigned long long operator"" _mb ( unsigned long long _bytes) { return _bytes * 1024_kb; } Данные операторы позволяют затем в коде использовать конструкции вида: int64_t buffer = 50_mb; Что по факту будет преобразовано в int64_t buffer = 52428800; Но, на мой взгляд, запись 50_mb сама за себя говорит что это за число. Так же такой механизм удобно использовать для обозначения времени: constexpr unsigned long long operator"" _sec ( unsigned long long _sec) { return _sec * 1000; } constexpr unsigned long long operator"" _min ( unsigned long long _min) { return _min * 60_sec; } И далее использовать как: int delay = 15_min;Ответ 2
Это пользовательские литералы. Подробнее можно почитать по запросу в гугле, или, например, на хабре . Также стоит почитать здесь .Ответ 3
#include#include int main() { using namespace std::chrono_literals; //3s - пользовательский литерал, определённый в std::chrono_literals std::chrono::milliseconds interval = 3s; /// выведет 3000 - 3000 миллисекунд std::cout << interval.count() << std::endl; ///А ещё есть префиксный строковый литерал, вопринимающий символы как есть ///Выведет \n\n std::cout << R"(\n\n)" << std::endl; return 0; } Пользовательские литералы, которые Вы сами определяете, необходимо отделять символом подчёркивания, чтобы они не конфликтовали с литералами, входящими в стандартную библиотеку - как 3s из std::chrono_literals в примере
Комментариев нет:
Отправить комментарий