字面值常量的相关问题

首先看这个就跟没定义一样的定义:像 42 这样的值,在程序中被当作“字面值常量”。>_<|||....

  1. 称之为字面值是因为只能用它的值称呼它,称之为常量是因为它的值不能修改。

  2. 每个字面值都有相应的类型,例如:0int 型,3.14159double 型。

  (注意:只有内置类型存在字面值,没有类类型的字面值。因此,也没有任何标准库类型的字面值。)

 

一、整型字面值规则 -- Rules for Integer Literals

定义字面值整数常量可以使用十进制、八进制和十六进制中的任一种形式来表示,例如,我们能将值 20 定义
  20     // decimal     我们通常的写法
  
024    // octal      以 0(零)开头
  
0x14   // hexadecimal  以 0x0X 开头
  (注意:这些进制仅仅是不同的写法,并不会改变整型字面值对应的二进制位的表示形式!)

  1. 通过增加后缀,能够强制将字面值整数常量转换为 longunsignedunsigned long 类型。通过在数值后面加 L 或者 l(字母“l”大写或小写)指定常量为 long 类型。

  2. 类似地,可通过在数值后面加 Uu 定义 unsigned 类型。同时加 LU 就能够得到 unsigned long 类型的字面值常量。但其后缀不能有空格:
  128u  /* unsigned   */            1024UL    /* unsigned long   */
  1L   /* long    */                 8Lu        /* unsigned long   */

  3. 没有 short 类型的字面值常量。(我也不知道为什么没有,反正没有就是没有! >_</// )

 

二、浮点字面值规则 -- Rules for Floating-Point Literals

通常可以用十进制或者科学计数法来表示浮点字面值常量。

  1. 使用科学计数法时,指数用 E 或者 e 表示。默认的浮点字面值常量为 double 类型。

  2. 在数值的后面加上 Ff 以后才会表示单精度。同样,加上 L 或者 l 表示扩展精度。 

  3. 下面每一组字面值表示相同的值:
      3.14159F            .001f           12.345L              0.
         3.14159E0f          1E-3F          1.2345E1L          0e0

 

三、布尔字面值和字符字面值 -- Boolean and Character Literals

  1. 单词 truefalse 是布尔型的字面值。

  2. 可打印的字符型字面值通常用一对单引号来定义: char ch1 = 'a';  char2 = '2';  char3 = ',';  char4 = ' '; // blank

  3. 在字符字面值前加 L 就能够得到 wchar_t 类型的宽字符字面值。如:  L'a'

 

四、非打印字符的转义序列 -- Escape Sequences for Nonprintable Characters

  1. 不可打印字符实际上是不可显示的字符,比如退格或者控制符。

  2.还有一些在语言中有特殊意义的字符,例如单引号、双引号和反斜线符号。

  3. 不可打印字符和特殊字符都用转义字符书写。转义字符都以反斜线符号开始,常用转义字符定义如下:
      \n (换行符)    \r (回车符)    \t (水平制表符)    \b (退格符)

  4. 不得不说的字符'\0', 通常表示“空字符(null character)”——这货可是有着非常特殊的意义的存在啊!你迟早会明白的!

 

 

五、字符串字面值 -- Character String Literals

字符串字面值常量用双引号括起来的零个或者多个字符表示。其中的不可打印字符表示成相应的转义字符。
  "Hello World!"          // simple string literal
     ""                               // empty string literal
     "\nCC\toptions\tfile.[cC]\n"     // string literal using newlines and tabs

  1. 为了兼容 C 语言,C++ 中所有的字符串字面值都由编译器自动在末尾添加一个空字符。
      字符字面值:    'A' // 表示单个字符 A
      然而,         "A" // 表示包含字母 A 和空字符两个字符的字符串。

  2. 正如存在宽字符字面值,也存在宽字符串字面值,宽字符串字面值是一串常量宽字符,同样以一个宽空字符结束。
      一样是在前面加“L”,如:  L"a wide string literal"

 

七、字符串字面值的连接 -- Concatenated String Literals

两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字面值。

  1. 这使得多行书写长字符串字面值变得简单:
       std::cout << "a multi-line "
                    "string literal "
                    "using concatenation"
                  << std::endl;

    执行这条语句将会输出:  a multi-line string literal using concatenation

  2. 如果连接字符串字面值和宽字符串字面值,结果是未定义的。例如:
      std::cout << "multi-line " L"literal " << std::endl;
    这个程序可能会执行,也可能会崩溃或者产生没有用的值,而且在不同的编译器下程序的动作可能不同。

 

  3. 另一个方法,依赖于程序格式化特性:在一行的末尾加一反斜线符号可将此行和下一行当作同一行处理。
      注意:反斜线符号必须是该行的尾字符——不允许有注释或空格符。
      同样,后继行行首的任何空格和制表符都是字符串字面值的一部分。

 

posted @ 2013-03-08 15:16  HandsomeDragon  阅读(673)  评论(0编辑  收藏  举报