User-defined literals (начиная с C++11)
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Этот раздел не завершён |
C + +11 появилась возможность добавлять собственные суффиксы литералы в целях обеспечения различных значений.
Оригинал:
C++11 introduced the ability to add custom suffixes to literals in order to provide different values.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Буквальное суффиксом могут быть перегружены таким образом, очень похожий на операторов.
Оригинал:
Literal suffixed can be overloaded in a way very similar to operators.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Синтаксис
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. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| name | — | Действительный C + + идентификатор, начинается с подчеркивания. Идентификаторы без подчеркивания, зарезервированы для использования в будущем
Оригинал: A valid C++ identifier, prefixed with an underscore. Identifiers without underscore are reserved for future use Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| n | — | Стоимости в результате неотъемлемой буквально
Оригинал: Value resulting from an integral literal Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| d | — | Стоимости в результате плавающей точкой буквально
Оригинал: Value resulting from a floating-point literal Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| c | — | Стоимости в результате литеру
Оригинал: Value resulting from a character literal Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| cstr | — | Null-строку, как обрабатывается компилятором, для целочисленных и плавающих литералы точки
Оригинал: Null-terminated string as parsed by the compiler, for integer and floating point literals Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| str/sz | — | Буфер и размер строкового литерала
Оригинал: Buffer and size from a string literal Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| body | — | Функция тела
Оригинал: Function body Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
[править] Примеры
Запустить этот код
#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

