MST

星途 面试题库

面试题:C++中const修饰类成员函数的作用及原理

在C++中,简述const修饰类成员函数有什么作用?这种修饰对函数的实现和调用有哪些具体限制?请举例说明。
12.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

const修饰类成员函数的作用

  1. 保证对象状态的安全性:表明该成员函数不会修改对象的成员变量(除了用mutable修饰的成员变量),使得在使用常量对象时也能调用该函数,增强代码的安全性和可读性。例如,一个用于获取对象内部数据但不改变其状态的函数适合声明为const成员函数。

对函数实现的具体限制

  1. 不能修改成员变量:在函数实现中,不能对非mutable的成员变量进行赋值等修改操作。例如:
class MyClass {
private:
    int data;
public:
    int getData() const {
        // data = 10;  // 错误,不能在const成员函数中修改非mutable成员变量
        return data;
    }
};
  1. 只能调用其他const成员函数:在该const成员函数内部,只能调用类的其他const成员函数,以确保不会意外修改对象状态。例如:
class MyClass {
private:
    int data;
public:
    int getData() const {
        anotherFunction();  // 假设anotherFunction也是const成员函数,这样调用合法
        return data;
    }
    void anotherFunction() const {}
};

对函数调用的具体限制

  1. 常量对象只能调用const成员函数:如果对象被声明为const,那么只能调用其const成员函数,否则编译会报错。例如:
class MyClass {
private:
    int data;
public:
    int getData() const {
        return data;
    }
    void setData(int newData) {
        data = newData;
    }
};

int main() {
    const MyClass obj;
    obj.getData();  // 合法,调用const成员函数
    // obj.setData(10);  // 错误,常量对象不能调用非const成员函数
    return 0;
}
  1. 非常量对象可以调用const和非const成员函数:非常量对象既可以调用const成员函数,也可以调用非const成员函数。例如:
class MyClass {
private:
    int data;
public:
    int getData() const {
        return data;
    }
    void setData(int newData) {
        data = newData;
    }
};

int main() {
    MyClass obj;
    obj.getData();  // 合法,调用const成员函数
    obj.setData(10);  // 合法,调用非const成员函数
    return 0;
}