据Bjarne的Stroustrup的编程原理与实践使用C++(第六印刷,2012年11月),"每个[中]类型[ int,double,char,string,和bool]文字都有自己的风格特点"(第63页).
在同一本书的§A.2中,int提到了(无符号;长)和浮点文字的其他变体,以及(null)指针文字.
是否每个类型都有相应的文字?
C++标准n3337 § 2.14.1/1:
有几种文字.
文字:
整数字面
字符文字
浮点字面
字符串字面量
布尔文字
指针字面
用户定义的字面
不,不是avery类型有文字.类没有文字,以及即void,int*,signed char,unsigned char,short,unsigned short.
整数字面
整数文字是一系列没有句点或指数部分的数字.
例: 1
字符文字
字符文字是用单引号括起来的一个或多个字符,如'x',可选地前面有字母u,U或L之一,如u'y',U'z'或L'x' , 分别.
'c-char-sequence'
你好了 - 序列'
U'c-char-sequence'
L'c-char-sequence'
例如: 'a','ab','\'',L'0','('
浮点字面
浮动文字由整数部分,小数点,小数部分,e或E,可选的有符号整数指数和可选的类型后缀组成.整数和分数部分都由一系列十进制(十进制)数字组成.可以省略整数部分或小数部分(不是两者); 可以省略小数点或字母e(或E)和指数(不是两者).整数部分,可选的小数点和可选的小数部分构成浮动文字的重要部分.指数(如果存在)表示要对其进行缩放的10的幂.
例如:123.456e-67,.1E1f,42.,13e3
字符串字面量
字符串文字是由双引号括起的字符序列(如2.14.3中所定义),可选地以R,u8,u8R,u,uR,U,UR,L或LR为前缀,如"......"中所示. ,R"(...)",u8"......",u8R" (...) ",u"......",uR"*(...)*","U".. .",UR"zzz(...)zzz",L"......"或LR"(...)".
encoding-prefixopt"s-char-sequenceopt"
encoding-prefixopt R raw-string
例如:"me",L"you"
布尔文字
布尔文字是关键字false和true.这样的文字是prvalues有类型的bool.
false
true
Run Code Online (Sandbox Code Playgroud)
指针字面
指针文字是关键字nullptr.它是一种类型的prvalue std::nullptr_t.
nullptr
Run Code Online (Sandbox Code Playgroud)
用户定义的字面
过载operator""允许使用用户定义的逻辑来解释文字.
例:
typedef double signalf;
constexpr signalf operator"" _percent( long double val) { return val / 100 ; }
std::cout << 12.34_percent; // prints 0.1234
Run Code Online (Sandbox Code Playgroud)