Пространства имён
Варианты
Действия

User-defined literals (начиная с C++11)

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
логические литералы
nullptr (C++11)
пользовательские (C++11)
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
C + +11 появилась возможность добавлять собственные суффиксы литералы в целях обеспечения различных значений.
Оригинал:
C++11 introduced the ability to add custom suffixes to literals in order to provide different values.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Буквальное суффиксом могут быть перегружены таким образом, очень похожий на операторов.
Оригинал:
Literal suffixed can be overloaded in a way very similar to operators.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Синтаксис

return decl operator"" name ( unsigned long long n ) { body }
return decl operator"" name ( long double d ) { body }
return decl operator"" name ( char c ) { body }
return decl operator"" name ( const char* str, size_t sz ) { body }
return decl operator"" name ( const char* cstr ) { body }

[править] Объяснение

return - Возвращаемое значение
decl -
Декларация спецификатор последовательности, могут содержать ключевые слова, как constexpr или inline
Оригинал:
Declaration specifier sequence, can contain keywords as constexpr or inline
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
name -
Действительный C + + идентификатор, начинается с подчеркивания. Идентификаторы без подчеркивания, зарезервированы для использования в будущем
Оригинал:
A valid C++ identifier, prefixed with an underscore. Identifiers without underscore are reserved for future use
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
n -
Стоимости в результате неотъемлемой буквально
Оригинал:
Value resulting from an integral literal
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
d -
Стоимости в результате плавающей точкой буквально
Оригинал:
Value resulting from a floating-point literal
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
c -
Стоимости в результате литеру
Оригинал:
Value resulting from a character literal
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
cstr -
Null-строку, как обрабатывается компилятором, для целочисленных и плавающих литералы точки
Оригинал:
Null-terminated string as parsed by the compiler, for integer and floating point literals
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
str/sz -
Буфер и размер строкового литерала
Оригинал:
Buffer and size from a string literal
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
body -
Функция тела
Оригинал:
Function body
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Примеры

#include <iostream>
 
// used as conversion
constexpr long double operator"" _deg ( long double deg )
{
    return deg*3.141592/180;
}
 
// used with custom type
struct mytype
{
    mytype ( unsigned long long m):m(m){}
    unsigned long long m;
};
mytype operator"" _mytype ( unsigned long long n )
{
    return mytype(n);
}
 
// used for side-effects
void operator"" _print ( const char* str )
{
    std::cout << str;
}
 
int main(){
    double x = 90.0_deg;
    std::cout << std::fixed << x << '\n';
    mytype y = 123_mytype;
    std::cout << y.m << '\n';
    0x123ABC_print;
}

Вывод:

1.570796
123
0x123ABC