zoukankan      html  css  js  c++  java
  • 成员函数后面加const,没有const,以及使用的区别

    函数后面加const

    编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外,后面有讲)。实际上,也就是对这个this指针加上了const修饰。

    #include <iostream>
    
    using namespace std;
    
    class CTest
    {
    public:
        void show() const
        {
            cout << "const" << endl;
        }
    
        void show()
        {
            cout << "normal" << endl;
        }
    };
    
    int main()
    {
        CTest a;
        a.show();
    
        const CTest b;
        b.show();
    
        system("pause");
        return 0;
    }

    显示结果:normal

                  const

    a对象将调用普通show(),b对象将调用show() const。

    如果注释掉 void show() const 该成员函数,b.show()将报错。

    如果注释掉 void show(),程序可以正常运行,因为a.show()调用时,会将其this指针上加const

    mutable关键字

    关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员。

    如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员。但是有些时候需要在该类函数中对类的数据成员进行赋值,这个时候就需要用到mutable关键字了。

    class CTest
    {
    public:
    
        bool GetData() const
        {
            m_n1++;
            return m_b2;
        }
    private:
        mutable int  m_n1;
        bool m_b2;
    };

    如果m_nA前不加mutable,编译将报错 error C2166: l-value specifies const object (error C2166: 左值指定 const 对象)

    转自:http://blog.csdn.net/anye3000/article/details/6618615

  • 相关阅读:
    linux常用统计命令
    linux文件处理命令
    linux三剑客和管道使用
    bash编程语法
    第八章:用通配符进行过滤
    第七章:数据过滤
    第六章:过滤数据
    第五章:排序检索数据
    第四章:检索数据
    第二章:MYSQL简介
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/5803143.html
Copyright © 2011-2022 走看看