字面量是在C/C++程序中直接可以用作表达式操作数的量,其不需要额外的对象来对其地址或值进行保存(通常,用户定义字面量除外)
字面量宝括: 整数字面量浮点数字面量字符字面量字符串字面量bool字面量用户定义字面量
整数字面量 整数字面量可以直接作为运算数的参与运算(整数字面量自C++17起引入二进制表示,所以当前整数字面量可以有二八十十六进制)整数字面量应该有如下规定: 以0开头的为特殊 之后直接为8进制数序列(0~8)的,则为合法的8进制数,否则为病式之后为x(大小写均可)的,则之后应该是16进制数序列(0~F)大小写均可,否则为病式之后为b(大小写均可)的,则之后应该是2进制数序列(0~1),否则为病式 或以十进制数为序列的在以上均正确之后,要求整数数值范围在目前规定(包含编译器扩充)的所有整数类型的至少一个的范围内,则其值才为正确.整数字面量后可以加后缀来修饰当前字面量的类型,但是注意有以下两组可供排列组合来选择:其中要注意格式,即不可以存在Ll的形式.
浮点数字面量 浮点数字面量同整数作用类似(浮点数字面量有十,十六两进制表示)浮点数字面量应该有如下规定: 浮点数字面量一共有三种形式 在C++ 17后拥有16进制浮点数表示法这里简单概括为:0x(可选) 数字序列 指数(可选) 数字序列指数满足开头可选的进制表示集合(未选择则表示十进制),并可选的包含零或一个(至多一个).(小数点)当可选的进制表示选中,则指数部分为p(可大写)并表示以2为底的指数(并且,必须包含此项),未选,则指数部分为E(可小写)并表示以10为底的指数注,指数后的数字只能是十进制,可正可负16进制浮点数实际上计算方式和二进制一样:0.x1 x2 ... xn => 16-1 * x1 + 16-2 * x2 + 16-n * xn
字符字面量 字符字面量由一个前缀(可选)和一对''包括,其中''可以是一个字符串序列,但是这个字符串序列必须服从以下基本要求:为一个非的字符若为开头的字符则要满足转义字符的相关规定,并且范围复合前缀规定若为多个非字符,则为int型,其数值是实现定义 ## 字符串字面量字符串字面量是由一个前缀和一对""其中包括一切正确的字符和转义字符组成其中有如下性质:两个向邻且之间无任何空白字符外的同基础字符类型字符串会在翻译阶段被整合为一整个,若基础类型不同,则为病式由于翻译阶段的贪婪原则,如果以宏替换一个字符串,则两字符串之间必须有空白字符隔开,否则对其有限匹配用户定义字面量函数,若没有,则为病式
对于raw(未处理的)字符串字面量是形式是R"定界()定界",其中定界是可选的,因为默认()是一对定界符,这里的额外的定界是为了标记定界括号用的,例如:
char str[] = R"((123)")";
上面的由于无定界符所以在123后面的)"会被当作字符串结尾,但是存在定界符:
char str[] = R"...((123)")...";
此时未出理的字符串内容就是(123)"了,因为标记范围已经明确.
转载于:https://www.cnblogs.com/A001/p/10443811.html