📜  C++中的const成员函数(1)

📅  最后修改于: 2023-12-03 15:14:02.321000             🧑  作者: Mango

C++中的const成员函数

在C++中,类中的函数可以被声明为const,以表示该函数不会修改类的成员变量。这种函数被称为“const成员函数”,并且可以通过对象的常量和非常量引用和指针进行调用。

基本语法

在函数声明或定义中,将关键字const放在函数参数列表后面的括号之前即可声明一个成员函数为const。例如:

class MyClass {
public:
    int getValue() const;
    // ...
};

int MyClass::getValue() const {
    // ...
}

需要注意的是,在类定义的声明和定义处都需要加上const

特点及应用

const成员函数具有以下特点:

  • 它们不能修改类的成员变量,但是可以访问它们。
  • 它们可以被常量对象(及常量引用和指针)调用。
  • 它们不能调用非const成员函数,除非使用mutable关键字修饰的变量。

const成员函数的主要应用场景是优化程序的性能和提高代码的可读性和健壮性。使用const修饰的成员函数可以避免意外修改对象的状态,增加了程序的安全性;而且,由于const成员函数不能修改对象的状态,它们在多线程并发操作中可以安全地共享。

示例

下面是一个简单的示例,演示了如何使用const成员函数:

#include <iostream>

class MyClass {
public:
    MyClass(int value) : m_value(value) {}
    int getValue() const;
    void setValue(int value);
private:
    mutable int m_count = 0; // mutable成员变量
    int m_value;
};

int MyClass::getValue() const {
    ++m_count; // mutable成员变量可以在const成员函数中修改
    return m_value;
}

void MyClass::setValue(int value) {
    m_value = value;
}

int main() {
    const MyClass obj(42);
    std::cout << obj.getValue() << std::endl; // 可以调用const成员函数
    std::cout << obj.m_count << std::endl; // mutable成员变量被修改了
    // obj.setValue(99); // 错误:不能调用非const成员函数
    return 0;
}
总结
  • const成员函数不会修改对象的状态,可以避免对象状态的意外修改,增强安全性。
  • const成员函数可以被常量对象调用,增加代码的可读性和健壮性。
  • mutable关键字可以使成员变量在const成员函数中被修改。