zoukankan      html  css  js  c++  java
  • const关键字

    const关键字的语义


           简单地说,const关键字将修饰一个量为“常量”,即不可变动的量。这个量在C++中可以是基本类型变量、类对象、指针、对象引用、类成员函数。

    const变量


           • C++标准规定:const关键字放在类型或变量名之前等价的:

    const int  n = 5;     <==>  int const  n = 5;
    const int *p = NULL;  <==>  int const *p = NULL;

           • Bjarne在《The C++ Programming Language》书中给出过一个助记方法: 把一个const声明从右向左读,*号读成pointer to:

    char * const p;               // p is a const pointer to char
    const char * p;               // p is a pointer to const char
    char ** p;                    // p is a pointer to pointer to char
    const char ** p;              // p is a pointer to pointer to const char
    char * const * p;             // p is a pointer to const pointer to char
    const char * const * p;       // p is a pointer to const pointer to const char
    char ** const p;              // p is a const pointer to pointer to char
    const char ** const p;        // p is a const pointer to pointer to const char
    char * const * const p;       // p is a const pointer to const pointer to char
    const char * const * const p; // p is a const pointer to const pointer to const char

    const成员函数


           类的const成员函数表示该成员函数对类成员拥有只读权限而没有写权限。一个类的对象分为常量对象和非常量对象,而类的成员函数也分成常量函数和非常量函数。两者的互相调用关系如下:
           • 非常量对象可以调用常量函数;
           • 非常量对象可以调用非常量函数;
           • 常量对象不可以调用非常量函数;
           • 常量对象可以调用常量函数;

    类的const成员变量初始化


           这里所谓的类const成员变量,其实包括了类实例的const成员变量类的const静态变量两种情况,下面用一个例子来说明应该如果初始化这两种const变量。

    #include <string>
    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
        static int    STATIC_NUMBER;                                        // 基本类型静态变量
        static string STATIC_STRING;                                        // 对象类型静态变量
    
        const static int    CONST_STATIC_NUMBER;                            // 基本类型常量静态变量
        const static string CONST_STATIC_STRING;                            // 对象类型常量静态变量
    
    public:
        const int    m_Number;                                              // 基本类型变量
        const string m_String;                                              // 对象类型变量
    
    public:
        Test(int n, string s) : m_Number(n), m_String(s)                    // 正确:构造函数初始化列表中初始化
        {
            // m_Number = n;                                                // 错误:构造函数体中初始化
            // m_String = s;                                                // 错误:构造函数体中初始化
        }
    
        ~Test() {}
    };
    
    // 普通静态变量初始化
    int    Test::STATIC_NUMBER = 1;
    string Test::STATIC_STRING = "static string";
    
    // 常量静态变量初始化
    const int    Test::CONST_STATIC_NUMBER = 2;
    const string Test::CONST_STATIC_STRING = "const static string";
    
    int main()
    {
        return 1;
    }
  • 相关阅读:
    前端与算法 leetcode 28.实现 strStr()
    前端与算法 leetcode 27.移除元素
    npm钉钉脚手架,支持考勤信息获取
    VSCode 使用Settings Sync同步配置(最新版教程,非常简单)
    VSCode 远程开发(带免密)
    vscode保存代码,自动按照eslint规范格式化代码设置
    matplotlib 3D数据-【老鱼学matplotlib】
    matplotlib等高线图-【老鱼学matplotlib】
    matplotlib柱状图-【老鱼学matplotlib】
    matplotlib散点数据-【老鱼学matplotlib】
  • 原文地址:https://www.cnblogs.com/heartchord/p/4485492.html
Copyright © 2011-2022 走看看