用我们的决心、信心和毅力来培植我们的|

3的4次方

园龄:2年1个月粉丝:5关注:89

2024-02-10 20:24阅读: 176评论: 0推荐: 0

C++11 用户定义字面量

C++11 用户定义字面量

C++11引入了一项功能,称为用户自定义字面量(user-defined literals),它允许程序员定义自己的字面量后缀,以扩展现有的字面量语法。

内置字面量

C++ 自带4种字面量:

  • 整形 123
  • 浮点型 12.3
  • 字符 '1'
  • 字符串 "123"

字面量又可添加后缀来表明具体类型,建议大写:

  • 无符号整形(unsigned int):123U
  • 长整形(long):123L

标准库定义了一些字面量后缀:

字面量后缀运算符 含义
operator""if
operator""i
operator""il
(C++14)
表示纯虚数的 std::complex 字面量 (函数)
operator""h(C++14) 表示小时的 std::chrono::duration 字面量 (函数)
operator""min(C++14) 表示分钟的 std::chrono::duration 字面量 (函数)
operator""s(C++14) 表示秒的 std::chrono::duration 字面量 (函数)
operator""ms(C++14) 表示毫秒的 std::chrono::duration 字面量 (函数)
operator""us(C++14) 表示微秒的 std::chrono::duration 字面量 (函数)
operator""ns(C++14) 表示纳秒的 std::chrono::duration 字面量 (函数)
operator""y(C++20) 表示特定年的 std::chrono::year 字面量 (函数)
operator""d(C++20) 表示月内日期的 std::chrono::day 字面量 (函数)
operator""s(C++14) 转换字符数组字面量为 basic_string (函数)
operator""sv(C++17) 创建一个字符数组字面量的字符串视图

用户定义字面量

用户定义字面量(UDL)允许程序员在代码中定义自己的字面量,这些字面量的类型可以是任何用户定义的类型。

为了定义一个用户自定义字面量,必须定义一个名为operator ""的函数,后面紧跟着一个下划线和字面量后缀。使用时在字面量后加上这个下划线后缀即可。

注意

  • 区别于标准库定义的字面量后缀运算符是不带下划线的 operator""X ,而用户定义字面量后缀运算符是带下划线的 operator""_X
  • 可以加上 constexpr 来避免函数调用
  • C++11 只允许字面量后缀函数的参数为以下类型,即整数,浮点以及字符串,而返回值则无类型限制:
    • unsigned long long
    • long double
    • char const*
    • char const*, std::size_t
    • wchar_t const*, std::size_t
    • char16_t const*, std::size_t
    • char32_t const*, std::size_t
long double constexpr operator""_cm(long double x) {
return x * 10;
}
int operator"" _bin(const char *s, size_t l) {
int ret = 0;
for (int i = 0; i < l; i++) {
ret = (ret << 1) | (s[i] - '0');
}
return ret;
}
int main() {
int num = "110"_bin; // 6
int mm = 12.3_cm; // 123
}

本文作者:3的4次方

本文链接:https://www.cnblogs.com/3to4/p/18013031

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   3的4次方  阅读(176)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起