C++关键字系列(二)——const 关键字

查看 37|回复 0
作者:johnsmith2077   
注意:本文包含 AI 生成内容 🤖
解释const的各种用法是 C++面试中的一个经典问题⚙️。const在 C++中是一个非常有用的关键字🔑,它的基本用法是限制一个变量不被修改🔒。const可以在多个地方使用,包括变量、指针、函数和类的成员函数。下面是一些实际的示例👇。
  • const 变量🔢

    const变量必须在声明时初始化,并且其值不能被修改。
    const int a = 10; // a 不能被修改
    可以将任意变量标记为const,包括全局变量和类中的数据成员🌍。
    对于const数据成员,它们必须在构造函数的初始化列表中初始化🏗️。
  • const 指针👉

    const可以用于指针和指针所指向的数据。它可以有三种组合:
  • 指针本身是 const
  • 指针所指向的数据是 const
  • 指针和指针所指向的数据都是 const

    int x = 10;
    const int *p1 = &x; // 指针所指向的数据是 const ,不能通过 p1 修改 x
    int *const p2 = &x; // 指针本身是 const ,不能修改 p2 指向的地址,但可以修改 x
    const int *const p3 = &x; // 指针和指针所指向的数据都是 const ,不能修改 p3 和 x
    尽管此语法初看起来有些复杂,但实际上存在一个简单的规则:const关键字作用于其直接左侧的内容(如果左侧为空,则作用于最近的右侧内容)🔍。例如,const int *p1中的const作用于int,表示指针所指向的数据是const,不能被修改。int *const p2中的const作用于*,表示指针本身是const,不能被修改。
  • const 成员函数📚

    在类中,const可以用于修饰成员函数,表示该函数不会修改类的任何成员变量。
    class MyClass {
    private:
        int x;
    public:
        MyClass(int val) : x(val) {}
        int getValue() const { return x; } // const 成员函数,不会修改 x
        void setValue(int val) { x = val; } // 非 const 成员函数,可以修改 x
    };
    注意,const成员函数,不能够修改任何成员变量(除非成员变量被mutable修饰符修饰),也不能调用任何非const成员函数🚫。
    对于const对象,只能调用const成员函数,不能调用非const成员函数。例如,下面的代码会报错:
    int main() {
        const MyClass obj(10);
        obj.setValue(20); // 错误:不能调用非 const 成员函数
    }
    同时,const成员函数可以与其非const版本进行重载。在这种情况下,如果对象是const的,会调用const版本的函数;如果对象不是const的,会调用非const版本的函数。这为我们提供了一种在不同情况下执行不同操作的能力💡。
    比如, std::vector类中就有const和非const版本的operator[]函数,它们分别用于读取和修改vector中的元素:
    class vector {
    public:
        int& operator[](int index); // 非 const 版本
        const int& operator[](int index) const; // const 版本
    };
  • const 引用参数📎

    函数的参数也可以是const,通常使用const T&的形式,即const引用,既保护输入的对象不被函数修改,同时还可以避免复制对象的开销。这对于处理大型对象时特别有用🐘。
    例如:
    void printVector(const std::vector& vec) {
        // 我们可以读取 vec 的信息,但不能修改 vec
        for (int i = 0; i
    在这个例子中,vec是一个const std::vector&,也就是一个指向std::vector对象的const引用。这意味着我们可以读取vec的信息(例如vec),但不能修改vec📖。
    以上就是const在 C++中的一些常见用法。在实际编程中,const可以用来保护数据不被意外修改,提高代码的安全性和可读性🛡️。
  • 您需要登录后才可以回帖 登录 | 立即注册