zoukankan      html  css  js  c++  java
  • C++/C常量


    简介

    1. 易忽略的常量:函数地址(函数名)、静态数组的名字、字符串常量的地址。

    2. 常量分类:字面常量、符号常量、契约性常量、布尔常量、枚举常量。


     常量认知

    1. 字面常量

    包括:各种进制的数字、字符、字符串。

    存储位置:程序的符号表中,非数据区。只能引用不能修改。只允许获取字符串的地址。

    1 x=-100.25f;
    2 char c='a';
    3 const char *pchar = "abcd";
    4 int *pInt = NULL;

    2. 符号常量

    包括:#define 定义的宏常量、const定义的常量。

    #define

    //const常量存储方式

    1. #define 定义的宏常量在进入编译阶段之前就已经被替换为字面常量,宏常量的本质就是字面常量

    const

    //const常量存储方式

    1. C中,const常量为值不能修改的变量,分配存储空间。

    2. C++中,基本数据类型的const常量放置在符号表中,

                         ADT数据类型、强制extern的const常量分配存储空间。

         //有用的实践

    3. 取const常量的地址:

        基本数据类型const常量:编译器在内存中创建一个拷贝,实际访问的是拷贝地址,非原始地址,无法通过指针修改基本类型const常量。

        构造数据类型const常量:可以通过获取常量指针,绕过编译器修改const常量。

    结论:只要得到对象的指针(内存地址),就可以越过编译器修改其内容,除非受到操作系统保护。

     3. 使用符号常量替代字面常量

    why:

    a.提高程序可读性。

    b.方便多处的相同数字或字符串修改。

    c.避免多次输入同样的数字或字符串引入错误。

    4. 类中的常量

    作用:

    将常量与类关联在一起,使其只在类中生效。

    方式:

    a.单个对象中的常量

    类中声明的const常量:

    //只是对象声明周期内的常量

    //不同对象的const常量可不同

     1 class A
     2 {
     3         A(int size)
     4         const int SIZE; //常量声明
     5                          const int size=10 错误的用法
     6 };
     7 
     8 
     9 A::A(int size):SIZE(size) //利用构造函数初始化列表初始化常量
    10 {
    11 }
    12 
    13 A a(100); //SIZE==100
    14 A b(200); //SIZE==200

     b.整个类内的常量:所有对象共享的常量

     enum常量:

    enum常量不占据对象的内存空间

    1 class A
    2 {
    3           enum
    4          {
    5           SIZE1=100;
    6           SIZE2=100;
    7           };
    8           int array1[SIZE1];
    9 };

    static const 常量:

    1 class A
    2 {
    3      static const int SIZE=100;//某些编译器不支持该用法
    4     
    5      int array[SIZE];
    6 };
  • 相关阅读:
    Java集合框架
    数字翻转
    Servlet的一些细节
    tomcat9配置https
    JavaWeb_打包web应用war
    JavaWeb_tomcat设置默认应用
    JavaWeb_增强for循环
    JavaWeb_静态导入、自动拆箱/装箱
    JavaWeb_泛型(Generic)
    54字符流中第一个不重复的字符
  • 原文地址:https://www.cnblogs.com/helo-blog/p/3779273.html
Copyright © 2011-2022 走看看