C++成员函数多位置const关键字的含义及用法适用性疑问
三个const关键字的含义
我们从左到右逐个解释:
- 第一个
const(T const &中的const):修饰返回值的类型,代表返回的是T类型的常量引用。调用方拿到这个返回值后,无法通过该引用修改数组data中对应位置的元素,避免外部意外改动内部存储的数据。 - 第二个
const(size_t const index中的const):修饰函数的形参index,代表在GetAt函数内部,不允许修改index的值,属于函数内部的参数只读约束,避免编码时误修改传入的下标参数。 - 第三个
const(参数列表后的const):是C++类成员函数特有的语法,代表这是一个常量成员函数。这类函数内部不允许修改类的任何非静态成员变量,也不能调用其他非常量成员函数,从语法层面保证该函数不会改动类实例的状态。
const修饰成员函数的适用场景
这种写法是C++「常量正确性」规范的核心写法之一,完全可以推广到绝大多数和类对象相关的场景:
- 所有不需要修改对象状态的成员函数都建议加const后缀,比如各类属性查询的getter函数、判断对象状态的校验函数(比如容器的
size()、empty()函数),加了之后常量类实例和非常量类实例都可以调用该函数,兼容性更强。 - 自定义类的运算符重载场景,比如
operator[]、operator==、operator<这类不需要改动对象状态的运算符,加上const后缀可以保证常量实例也能正常使用这些运算符。 - 需要传入只读对象的回调场景:如果业务逻辑要求传入的对象不能被改动,就可以将对应操作的成员函数声明为const,配合const引用传参使用,从语法层面规避对象被意外修改的风险。
内容的提问来源于stack exchange,提问作者Bogfoot
相关产品推荐
相关产品推荐

