const的用法
解释 const auto func(const int& a) const {}
中各个 const
的含义。
代码示例及分析
#include <iostream>
class MyClass {
public:
// 成员函数定义
const auto func(const int& a) const {
std::cout << "Received value: " << a << std::endl;
return a * 2;
}
};
int main() {
MyClass obj;
const int num = 5;
const auto result = obj.func(num);
std::cout << "Result: " << result << std::endl;
return 0;
}
各个 const
的具体含义
1. const auto
- 位置:函数返回类型部分。
- 含义:这里的
const
修饰函数的返回值。表示该函数返回的对象是一个常量对象,调用者不能修改这个返回值。auto
是 C++11 引入的类型推导关键字,编译器会根据函数体中的返回语句自动推导返回值的类型。在上述示例中,返回值是a * 2
,由于a
是int
类型,所以auto
会被推导为int
,整个返回类型就是const int
。
2. const int& a
- 位置:函数参数部分。
- 含义:这里的
const
修饰函数的参数。const int&
表示传递给函数的是一个int
类型的常量引用。使用常量引用作为参数有两个主要好处:一是避免了不必要的对象拷贝,提高了效率;二是保证在函数内部不会修改传入对象的值,增强了代码的安全性。在上述示例中,a
是对传入的int
类型对象的常量引用,函数内部不能修改a
的值。
3. 函数后面的 const
- 位置:函数声明或定义的末尾。
- 含义:这个
const
表示该函数是一个常量成员函数。常量成员函数承诺不会修改调用该函数的对象的任何非静态数据成员。也就是说,在常量成员函数内部,不能对对象的非静态成员变量进行赋值操作。这使得该函数可以被常量对象调用。在上述示例中,func
是一个常量成员函数,因此可以被const
类型的MyClass
对象调用。