const在函数/方法签名后的含义是什么?

这个问题在这里已经有了答案:

  • C ++方法声明中最后一个“const”的含义? 7个答案

  • 这意味着该方法不会修改成员变量(除了声明为mutable的成员),所以它可以在类的常量实例上调用。

    class A
    {
    public:
        int foo() { return 42; }
        int bar() const { return 42; }
    };
    
    void test(const A& a)
    {
        // Will fail
        a.foo();
    
        // Will work
        a.bar();
    }
    

    还要注意的是,尽管成员函数不能修改未标记为可变的成员变量,但如果成员变量是指针,成员函数可能无法修改指针值(即指针指向的地址),但它可以修改指针指向的内容(实际内存区域)。

    例如:

    class C
    {
    public:
        void member() const
        {
            p = 0; // This is not allowed; you are modifying the member variable
    
            // This is allowed; the member variable is still the same, but what it points to is different (and can be changed)
            *p = 0;
        }
    
    private:
        int *p;
    };
    

    编译器不允许const成员函数更改* this或为此对象调用非const成员函数

    链接地址: http://www.djcxy.com/p/40415.html

    上一篇: What does const mean following a function/method signature?

    下一篇: Using 'const' in class's functions