C++ Literais definidas pelo usuário
Para que servem
- para definir atalhos sintáticos para linguagens comuns e aumentar a segurança do tipo
- para conveniência ou para dedução de tipo em tempo de compilação
Desempenho
- não há vantagem ou desvantagem de desempenho para literais definidos pelo usuário
Categorias de literais
Existem 6 categorias:
- inteiro
- caractere
- ponto flutuante
- cadeia de caracteres
- bool
- ponteiro
Literais definicos na biblioteca padrão
<string>
string str = "hello"s + " world"s;
<complex>
complex<double> num = (2.0 + 3.01i) * (5.0 + 4.3i);
<chrono>
bash
auto duration = 15ms + 42h;
Assinaturas dos literais definidos pelo usuário
Você implementa um literal definido pelo usuário definindo um operator ""
no
escopo de namespace com uma das seguintes assinaturas:
ReturnType operator "" _a(unsigned long long int); // Literal operator for user-defined INTEGRAL literal
ReturnType operator "" _b(long double); // Literal operator for user-defined FLOATING literal
ReturnType operator "" _c(char); // Literal operator for user-defined CHARACTER literal
ReturnType operator "" _d(wchar_t); // Literal operator for user-defined CHARACTER literal
ReturnType operator "" _e(char16_t); // Literal operator for user-defined CHARACTER literal
ReturnType operator "" _f(char32_t); // Literal operator for user-defined CHARACTER literal
ReturnType operator "" _g(const char*, size_t); // Literal operator for user-defined STRING literal
ReturnType operator "" _h(const wchar_t*, size_t); // Literal operator for user-defined STRING literal
ReturnType operator "" _i(const char16_t*, size_t); // Literal operator for user-defined STRING literal
ReturnType operator "" _g(const char32_t*, size_t); // Literal operator for user-defined STRING literal
ReturnType operator "" _r(const char*); // Raw literal operator
template<char...> ReturnType operator "" _t(); // Literal operator template