根据Bjarne Stroustrup的编程原理与实践使用C ++(第六次印刷,2012年11月),“每种类型[int
,double
,char
,string
和bool
]有自己独特的文字风格“(第63页)。
在同一本书的§A.2中,提到了int
(无符号;长)和浮点文字的其他变体,以及(null)指针文字。
每个类型都有相应的文字吗?
答案 0 :(得分:5)
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'
U'c-char-sequence'
L'c-char-sequence'
示例:'a'
,'ab'
,'\''
,L'0'
,'('
<强>浮字面强>
浮动文字由整数部分,小数点,小数部分,e或E,可选的有符号组成 整数指数和可选的类型后缀。整数和分数部分都由一系列序列组成 十进制(十进制)数字。可以省略整数部分或小数部分(不是两者);无论是 可以省略小数点或字母e(或E)和指数(不是两者)。整数部分, 可选的小数点和可选的小数部分构成浮动文字的重要部分。该 指数(如果存在)表示要对有效部分进行缩放的10的幂。
示例:123.456e-67
,.1E1f
,42.
,1 3e3
<强>字串文本强>
字符串文字是由双引号括起来的字符序列(如2.14.3中所定义),可选 以R,u8,u8R,u,uR,U,UR,L或LR为前缀,如“......”,R“(...)”,u8“...”,u8R“ (...)“,你”......“, 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
<强>指针字面强>
指针文字是关键字nullptr
。它是std::nullptr_t
类型的prvalue。
nullptr
用户定义的字面强>
允许使用用户定义的逻辑解释文字的operator""
重载。
示例:
typedef double signalf;
constexpr signalf operator"" _percent( long double val) { return val / 100 ; }
std::cout << 12.34_percent; // prints 0.1234
答案 1 :(得分:1)
int*
没有字面值。您得到的最接近的是nullptr
,但其类型为nullptr_t
。
答案 2 :(得分:1)
大多数类型没有文字。课程没有。指针,引用,r值引用也没有。 void
没有文字。
你提到string
也没有文字,它只有一个带const char*
字面值的构造函数!在将const char*
字面值分配给字符串时,C ++会隐式调用此构造函数。
答案 3 :(得分:1)
添加到列表中,signed char
,unsigned char
,short
,unsigned short
没有文字。
你应该考虑有文字的有限类型列表,而不是没有文字的类型。文字适用于:
加上用户定义的文字。
答案 4 :(得分:0)
首先,类型std::string
没有自己的文字。
只有算术类型有自己的文字。例外情况是字符串文字,其类型为const char arrays
,并且在类型为nullptr
std::nullptr_t
中不会引入
考虑到bool
是算术类型。
答案 5 :(得分:0)
Bjarne Stroustrup的使用C ++编程原理和实践(第六次印刷,2012年11月)将ISO/IEC 14882:2003称为相关的C ++标准。在此可以找到相关部分,§2.13,其内容如下:
2.13 Literals
There are several kinds of literals.
literal:
integer-literal
character-literal
floating-literal
string-literal
boolean-literal
显然,这是一份详尽的清单;并且因为该列表中的文字类型可能比其他类型更多,所以答案是:不,并非每个类型都有相应的文字。
N.B。对于C ++ 11案例,请参阅Lizusek's answer。