c++支持多种内置类型的字面量,比如:

123u // unsigned int
1.0 // double
1.6f // float
'a' // char
4ULL // unsigned long long
"as" // c-stype string

而c++11支持为内置类型提供新的自定义字面量的形式,比如:

“Hi!”s // std::string
1.2i // imaginary of Complex
10110000b // binary
10s // 10 seconds
100.0km // kilometers
12345678901234567890123456789x // extentend-precision

这种形式是通过重载operator ""(双引号)后缀运算符实现的(称为literal operator,字面量运算符)。举例说明:

    string operator""s(const char * sz, size_t n){return string{sz, n};}constexpr complex<double> operator""i(double d){return {0.0, d};}

上面代码定义了后缀s和i的重载形式。可以使用下面代码测试:

    auto cp = 1.6i;auto str = "test literal"s;

这种形式的后缀重载可以使用任意标准未规定的后缀,但是不能重载或重定义已经使用的后缀形式,比如前面提到的d、u、f、l等后缀。operator""支持四种格式的重载:

  • 整型字面量

重载literal运算符时使用unsigned long longconst char *、或者模板literal运算符,比如:123m,1234567890123456789x。

  • 浮点型字面量

重载literal运算符时使用long doubleconst char *、或者模板literal运算符,比如:10.0s, 4567.891234567x。

  • 字符串字面量

重载literal运算符时使用(const char*, size_t)参数,比如:"string"s, "Foobar"_path。

  • 字符

重载literal运算符时使用char, wchar_t, char16_t, char32_t参数,比如: 'f'_runic, u'BEEF'_w。

注意c++标准规定保留所有非下划线开头的字面量后缀形式,重载literal运算符时建议使用下划线开头
如果使用了非下划线开头的literal运算符重载形式,在GCC编译器中也会有警告信息。

c++11中提供literal运算符的重载形式,给字面常量的处理带来很大的便利性和可定制化处理,比如可以在c++中支持任意进制的数据输入、支持大数处理(不用通过先保存为字符串,然后预处理的机制)等。

附加说明

如果有其他描述不清楚的地方,建议参考《c++11标准》或者TCPL ch12.2.5。

所有代码都在gcc(W64)的版本中编译测试过,相关源码可以从我的git下载,url如下:https://git.oschina.net/Tocy/SampleCode.git ,位于c++11目录下的cpp_user_def_literal.cpp文件中。

User-Defined-Literal自定义字面量相关推荐

  1. c++语言自定义操作符,C++11新特性之自定义字面量

    1.示例 C++11新标准中引入了用户自定义字面量,也叫自定义后缀操作符,即通过实现一个后缀操作符,将申明了该后缀标识的字面量转化为需要的类型.考察如下代码: long double operator ...

  2. C++11 用户自定义字面量

    1.示例 C++11新标准中引入了用户自定义字面量,也叫自定义后缀操作符,即通过实现一个后缀操作符,将申明了该后缀标识的字面量转化为需要的类型.考察如下代码: long double operator ...

  3. 字面量(literal)与 C 语言复合字面量(compound literals)

    在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)(字面量是相对变量常量等定义的,无论是常量还是变量,其值在某一时刻总是确定的,只是变量可以反复赋值.刷新 ...

  4. Java for Selenium | Java中的变量variable、常量constant、字面量Literal

                                       Java中的变量.常量与字面量 什么是变量(variable)? 程序语言大多数时候都是在处理不同的数据,比如整型数据int,字符 ...

  5. 编程语言中字面常量(literal)的详细介绍(关键词:Java,文字量,直接量,常量,常值,字面量,字面值,实字)

    一.问题背景 博主在复习<Java疯狂讲义>第3章(数据类型和运算符)时,其中在3.2.3 Java关键字中提到了直接量的概念: 如上图所述,原文提到: TRUE. FALSE 和 NUL ...

  6. 浅析Objective-C字面量

    编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架.虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架.这几 ...

  7. js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  8. js设计模式每次10分钟:字面量和构造函数模式对比

    字面量和构造函数模式 字面量 var dog={} dog.name="benji"; //属性 dog.getName=function(){ //方法return this.n ...

  9. JavaScript基础09-day11【原型对象、toString()、垃圾回收、数组、数组字面量、数组方法】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

最新文章

  1. 单件模式Singleton Pattern
  2. iOS开发 贝塞尔曲线UIBezierPath(后记)
  3. PageRanke算法
  4. 深度学习工具那么多,究竟哪款最适合你?| 线下沙龙 × 报名
  5. Go全局变量syntax error: non-declaration statement outside function bodygo
  6. ios 内存管理的理解(三)ARC下 对象内存管理
  7. 交换排序之冒泡排序和快速排序
  8. 条款4:确定对象被使用前已被初始化(Make sure that objects are initialized before they're used)...
  9. 气是能量的宏观运行的现象描述
  10. 关于在GridControl中添加GridLookUpEdit绑定数据
  11. python批量图片自动编码
  12. http://www.jobui.com/mianshiti/it/java/6782/
  13. SqlServer执行计划
  14. Java 网络编程:(七)UDP网络编程
  15. 闹归闹,还是要说几件正事
  16. 莫纳什大学计算机专业在哪个校区,莫纳什大学校区几个
  17. 【综合复习_网络部分】
  18. 穷人实现阶级跨越有多难
  19. 小程序开发入门常见小问题-(1)
  20. 【解决方法】点击bootstrap里导航条nav里的下拉菜单无反应)

热门文章

  1. 一个基于typescript、mobx、react16、react-router4、antd的后台模板
  2. 纯手工打造简单分布式爬虫(Python)
  3. 理解C#中的里氏转换
  4. 浏览器根对象document之字符串属性
  5. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。
  6. javascript的id、class、元素选择器
  7. powershell.exe直接运行命令
  8. Maximo中调用XFire客户端的实现—Weblogic中间件
  9. 微信小程序图片上下有等值空白问题
  10. PHP中4个包含文件方法的差异