C++学习之数据类型—常量

来源:互联网 发布:国内小众服装品牌知乎 编辑:程序博客网 时间:2024/06/01 18:45

C++常量分为以下字面常量、符号常量、契约性常量、布尔常量和枚举常量,让我们一起来看看这些常量的用法以及特点。

字面常量:

       1、整形字面常量

       例如 10,057,0xf7,表示方法可以有八进制,十进制,十六进制。默认的类型为int或者long行,根据字面值的大小来判断。可以通过加入后缀L或者l来强制转换为long类型,又可以加后缀U或者u来强制转换为unsigned类型,例如1024UL为unsigned long类型。

      2、浮点字面值常量

      可以用十进制,例如3.14或者科学计数法3.12E2来表示,默认的浮点字面值为double类型,在数值后面加上F或者f表示单精度,加上L或者l表示long double类型。

      3、字符常量

      可打印字符,直接加单引号表示,例如 ‘a’,‘2’;不可打印字符,例如退格键,用转义字符表示,例如换行符‘\n',回车符'\r'等等。

      4、字符串常量

      例如“hello”,“”,两个相邻的仅由空格、制表符和换行符分开的字符串字面值,可以连接成一个新的字符串字面值。例如

      std::out<<"welcome "

                      "to "

                      "C++ world!"<<endl; 

      将会输出:welcome to C++ world!

     还有一种方法可以连接多行字面值,在一行程序的末尾加一个反斜杠号可以将此行和下一行当做同一行处理。例如

      co\
     ut<<"abc\
        def"<<endl;

    此处,输出abc  def。值得注意的是,反斜杠号必须是该行的尾字符,同样,后继行行首的任何空格和和制表符都是该字符串字面值的一部分。

    另外,值得一提的是,除了字符串常量之外,无法获取一个字面常量的地址,例如,我们可以char* pa="abc",但是int *p=&3 这样写是错误的

符号常量:

   存在两种符号常量,由#define定义的宏常量和const定义的常量。由#define定义的宏常量是预编译伪指令,在进入编译阶段之前就已经替换成了字面常量,所以,宏常量本质上是字面常量;而由const定义的常量则更为灵活,需分情况对待。

   1、const全局常量

   此时编译器将该常量放置于符号表中,不需要分配存储空间。任何对该常量的修改都将失败,见下例

  

    此处,编译链接没有出错,但运行的时候不能通过。

   2、const局部常量

  

    此处输出,100和1。对此,《C++ primer》上的解释是对于基本类型的const常量,编译器会重新在内存中创建一个它的拷贝,通过其地址访问的是它的拷贝而非原始的符号常量。













原创粉丝点击