zoukankan      html  css  js  c++  java
  • C++ Const(常类型)的作用总结

    C++ Const的作用总结

    面试或者工作中,我们经常遇到const修饰符定义的变量,函数和对象等。那么const的作用具体是什么,有哪些。今天自己好好的总结了一下,记录下来方便自己以后时间久了不记得,可以回头看一下。

    在C中,我们都是习惯用#define来定义常量,C++中提供了const修饰符来定义常量,这种方式更灵活,更安全。主要表现在define常量是没有类型定义的,const常量是类型化的,它有地址,可以用指针指向这个值,但是不能修改它。

    Const的使用

    • 和指针一起使用

    Const可以和指针一起使用,它们的组合情况比较复杂,可归纳为三种:指向常量的指针,常指针和指向常量的常指针。

    (1) 指向常量的指针是指一个指向常量的指针变量,例如:

    const char* info = “name”;          // 声明指向常量的指针

    这条语句的含义是:声明一个名为info的指针变量,它指向一个字符型的常量,初始化为info指向字符串“name”。

    所以下面的一句是错误的:info [3] = ‘b’;

    因为这里指针所指的数据(name)是常量,不能通过解引用来修改该数据。

    然后下面这句话是允许的:info = “sex”;

    因为指针本身是变量,可以指向其他的内存单元。

    (2) 常指针是指把指针本身,而不是它指向的对象声明为常量,例如:

    char * const info = “name”;         // 常指针

    这条语句的含义是:声明一个名为info的指针变量,它指向一个字符型数据的常指针,初始化为“name”的地址。常指针就是创建一个不能移动的固定指针(地址不能改变),但是它所指的数据是可以改变的。

    所以下面的一句是错误的:info = “sex”;

    因为指针本身是常量,不能指向其他的内存单元。

    然后下面这句话是允许的:info [3] = ‘b’;

    因为指针所指向的数据是可以通过解引用来修改的。

    (3) 指向常量的常指针是指这个指针本身不能改变,它所指向的值也不能改变,声明一个指向常量的常指针,二者都要声明为const,例如:

    const char * const info = “name”;

    这里就是上面两种的结合了,info = “sex”和info [3] = ‘b’都是错误的。

    其他说明:

      a. 常量一旦建立,在程序的任何地方都不能在修改。

      b. 与#define定义的常量不同,const定义的常量因为有自己的数据类型,这样C++编译时就会进行严格的类型检查,具有良好的编译时的检测性。

      c. 函数的参数也可以用const说明,用于保证实参在该函数内部不被改动。

    • 常引用

    如果在声明引用是用const修饰,那么该引用就被称为常引用。常引用所引用的对象不能被更新。如果用常引用做为形参,便不会产生对实参不希望的修改。

    定义:const 数据类型 &引用名;

    如: int a = 5;

         const int &b = a;

    其中,b是一个常引用,它所引用的对象不允许更改,如果出现:

    b=6;

    则是非法的。(如果你写a=6,这个不会出问题,因为a不是常类型变量。)

    常引用常常被用作形参,例如:

    void main()
    {
        int a = 10;
        int b = 20;
        add(a, b);
    }
    
    int add(cons int &a, const int &b)
    {
        // a += 10;         // 非法的,形参a为常引用,不能改变它的值
        return (a + b);
    }
    
    • 常对象

    如果在声明对象的时候用const修饰,则称被声明的对象为常对象。常对象的数据成员值在对象的整个生命周期内不能被改变。

    定义:类名 const 对象名[(参数表)]或者const 类名 对象名[(参数表)]

    在定义对象时必须进行初始化,而且不能被更新,C++不允许直接或间接的更改常对象的数据成员。

    • 常对象成员

    (1) 常数据成员

    类的数据成员可以是常量或常引用,使用const说明的数据成员称为常数据成员。如果在一个类中声明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,而任何其他的函数都不能对该成员函数赋值。

    (2) 常成员函数

    在类中使用关键字const的函数称为常成员函数,常成员函数的格式如下:

    返回类型 函数名(参数表)const;

    const是函数类型的组成部分,所以在函数的实现部分也要带关键字const。

    如:

    void showDate() const;       // 声明
    void showDate() const       // 实现
    {
        printf(“year”);
    }
    

    说明:

      a. 如果将一个对象声明为常对象,则通过该对象只能调用它的常成员函数,而不能调用普通的成员函数。常成员函数是常对象的唯一的对外接口。

      b. 常成员函数不能更新对象的数据成员,也不能调用该类中的普通成员函数,这就保证了在常成员函数中绝对不会更新数据成员的值。

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/dhls231/p/Const.html
Copyright © 2011-2022 走看看