C++成员函数后的const是否将返回值转为const?语法疑问
关于C++中成员函数const修饰的问题
1. bool foo() const { return bar; }不会将返回值转为const
这个写法里的const是成员函数的常量限定符,核心作用是修饰成员函数所属的对象(即this指针):
- 它会把
this指针的类型从T*变为const T*,意味着函数内部不能修改类的非mutable成员变量 - const成员函数可以被const对象调用,而非const成员函数不行
- 该
const与返回值类型完全无关,不会把返回的bool转换成const bool
2. 和const bool foo() { return bar; }的区别
这里的const是修饰返回值类型:
- 对于
bool这类基本数据类型,返回const bool没有实际意义——函数返回的是右值,本来就无法被修改 - 如果返回的是类类型(比如
const MyClass foo()),返回值会是const对象,此时不能直接对返回结果调用非const成员函数(比如foo().modify()会报错) - 而成员函数后的
const是限定函数对当前对象的操作权限,和返回值没有关联
3. 不等同于函数接收的参数为常量
成员函数后的const和函数参数的const是完全不同的概念:
- 参数的
const(比如void foo(const int x))是限定函数内部不能修改该参数的值 - 成员函数后的
const是限定函数不能修改当前类对象的非mutable成员,同时限制该函数只能被const对象调用,和函数的输入参数无关
内容的提问来源于stack exchange,提问作者user22002675
相关产品推荐
相关产品推荐

