User-Defined-Literal自定义字面量
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 long、const char *、或者模板literal运算符,比如:123m,1234567890123456789x。
- 浮点型字面量
重载literal运算符时使用long double、const 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自定义字面量的更多相关文章
- Literal 字面值 字面量 的理解
Literal 字面值 字面量 Literal, 在程序语言中,指表示某种数据值的符码.如,123 是整数值符码, 3.14 是浮点值符码,abcd 是字串值符码,True, False, 是逻辑值符 ...
- object literal对象字面量
<JavaScript高级程序设计(第3版)>有个陌生的新词:对象字面量,无法理解.看了一下英文原版,英文是object literal ,还是不太理解.后来想明白了,主要是literal ...
- TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要
在学C/C++ Java等强类型语言时,变量类型是唯一的,需要先指定.PHP JavaScript等弱类型语言时,无需指定变量类型 但是,TypeScript里面的联合类型 (Union Type) ...
- js字面量
以前一直对js字面量模棱两可. '字面量是一种表示值的记法.' js字面量(literal) 分为以下几个 number literal 8 就是数字字面量 string liter ...
- 【Go入门教程2】基本构成元素:标识符(identifier)、关键字(keyword 25个)、字面量(literal)、分隔符(delimiter)、和 操作符(operator)
基本构成要素 Go 的语言符号 又称 词法元素,共包括 5 类内容——标识符(identifier).关键字(keyword).字面量(literal).分隔符(delimiter) 和 操作符(op ...
- js学习-自定义函数、对象的字面量、json对象学习小结
一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...
- 字面量(literal)与 C 语言复合字面量(compound literals)
在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)(字面量是相对变量常量等定义的,无论是常量还是变量,其值在某一时刻总是确定的,只是变量可以反复赋值.刷新 ...
- JS基础语法---创建对象---三种方式创建对象:调用系统的构造函数;自定义构造函数;字面量的方式
创建对象三种方式: 调用系统的构造函数创建对象 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象) 字面量的方式创建对象 第一种:调用系统的构造函数创建对象 //小苏举例子: //实例化对 ...
- expression,statement,definition ,identifier(symbol) ,literal(字面量) 术语
expression: an expression evaluates to a value only statement: a statement containing executable cod ...
随机推荐
- 如何关闭Golang中的HTTP连接 How to Close Golang's HTTP connection
我们的一个服务是用Go写的,在测试的时候发现几个小时之后它就会core掉,而且core的时候没有打出任何堆栈信息,简单分析后发现该服务中的几个HTTP服务的连接数不断增长,而我们的开发机的fd lim ...
- nullpointerxception——处理思路
概念: 1.所谓的指针,就是java中的对象的引用.比如String s;这个s就是指针.2.所谓的空指针,就是指针的内容为空.比如上面的s,如果令它指向null,就是空指针.3.所谓的空指针异常,就 ...
- Ant压缩与解压缩
package com.test.utils; import java.io.File; import java.io.FileOutputStream; import java.io.InputSt ...
- RFID-RC522 与Arduino的连接
一.前几天在某宝上刚买了个RFID-RC522 ,目标是复制我的门禁卡(看样子没多大希望了).二.各种百度各种谷歌都没找到与Arduino的连接方式. so,分享下我的连接方式,与大家共同进步... ...
- Fedora 20 安装搜狗拼音输入法
1.卸载ibus sudo yum remove ibus gsettings set org.gnome.settings-daemon.plugins.keyboard active fal ...
- magento登陆
magento判断用户登录 Magento 登陆之后返回登录之前的页面 magento 在登陆后一般会自动跳转到 My Account 页面 但是经常会有需求 就是登陆自动跳转到 之前的页面里面 工具 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- cucumber java从入门到精通(4)Scenario Outline及数据驱动
cucumber java从入门到精通(4)Scenario Outline及数据驱动 到目前为止,我们的TodoList类工作良好,不过离我们的预期--任务清单系统还是有不少差距,究其原因不过如下: ...
- Database Vault Administrator的使用
第一次安装Database Vault的时候,先安装好了Database Vault.然后才安装的EM.发现,根本无法訪问<span><span>Database Vault ...
- MFC动态按钮的创建及其消息响应 和 自定义消息
原文链接: http://www.cnblogs.com/gaohongchen01/p/4046525.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC ...