每种类型都有相应的文字吗?

时间:2014-03-05 13:12:00

标签: c++ oop

根据Bjarne Stroustrup的编程原理与实践使用C ++(第六次印刷,2012年11月)“每种类型[intdoublecharstringbool]有自己独特的文字风格“(第63页)。

在同一本书的§A.2中,提到了int(无符号;长)和浮点文字的其他变体,以及(null)指针文字。

每个类型都有相应的文字吗?

6 个答案:

答案 0 :(得分:5)

  

C ++标准版n3337 § 2.14.1 / 1:

     

有几种文字。

     

字面:

     

整数字面

     

字符字面

     

浮字面

     

字串文本

     

布尔字面

     

指针字面

     

用户定义字面

不,不是avery类型有文字。类没有文字,以及voidint*signed charunsigned charshortunsigned 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.1E1f42.,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"

<强>布尔字面

布尔文字是关键字falsetrue。此类文字为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 charunsigned charshortunsigned short没有文字。

你应该考虑有文字的有限类型列表,而不是没有文字的类型。文字适用于:

  • BOOL
  • char,wchar_t,char16_t,char32_t
  • “const of array”char,wchar_t,char16_t,char32_t(即字符串文字)
  • int,unsigned int
  • long,unsigned long
  • long long,unsigned long long
  • float,double,long double
  • 的std :: nullptr_t

加上用户定义的文字。

答案 4 :(得分:0)

首先,类型std::string没有自己的文字。 只有算术类型有自己的文字。例外情况是字符串文字,其类型为const char arrays,并且在类型为nullptr

的C ++ 11 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