• 成员函数定义后面加 const 的意义


    我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。
    其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。

    c++ 函数前面和后面 使用const 的作用:

    前面使用const 表示返回值为const

    后面加 const表示函数不可以修改class的成员 (仅为可读,不可写入)

    请看这两个函数

    const int getValue();

    int getValue2() const;

    头文件定义

    /*
     * FunctionConst.h
     */
    
    #ifndef FUNCTIONCONST_H_
    #define FUNCTIONCONST_H_
    
    class FunctionConst {
    public:
        int value;
        FunctionConst();
        virtual ~FunctionConst();
        const int getValue();
        int getValue2() const;
    };
    
    #endif /* FUNCTIONCONST_H_ */

    源文件实现

    /*
     * FunctionConst.cpp 
     */
    
    #include "FunctionConst.h"
    
    FunctionConst::FunctionConst():value(100) {
        // TODO Auto-generated constructor stub
    
    }
    
    FunctionConst::~FunctionConst() {
        // TODO Auto-generated destructor stub
    }
    
    const int FunctionConst::getValue(){
        return value;//返回值是 const, 使用指针时很有用.
    }
    
    int FunctionConst::getValue2() const{
        //此函数不能修改class FunctionConst的成员属性 value
        value = 15;//错误的, 因为函数后面加 const
        return value;
    }

    参考 https://stackoverflow.com/questions/2157458/using-const-in-classs-functions

    what is the real definition and use of const ?

    A const method can be called on a const object:

    class CL2
    {
    public:
        void const_method() const;
        void method();
    
    private:
        int x;
    };
    
    
    const CL2 co;
    CL2 o;
    
    co.const_method();  // legal
    co.method();        // illegal, can't call regular method on const object
    o.const_method();   // legal, can call const method on a regulard object
    o.method();         // legal

    Furthermore, it also tells the compiler that the const method should not be changing the state of the object and will catch those problems:

    void CL2::const_method() const
    {
        x = 3;   // illegal, can't modify a member in a const object
    }

    There is an exception to the above rule by using the mutable modifier, but you should first get good at const correctness before you venture into that territory.

  • 相关阅读:
    搜索框用定时器限制发送请求
    vue的生命周期,钩子函数
    事件委托的实现流程
    在vscode中快速生成vue模板
    JS继承
    各种宽高
    ES6新特性
    python入门学习一
    字符编码
    npm install --save 与 npm install --save-dev 的区别
  • 原文地址:https://www.cnblogs.com/clemente/p/10889020.html
Copyright © 2020-2023  润新知