const和函数的用法
一、用const修饰函数的参数
函数参数类型前加const指明该参数为常量,在函数内部不可改变。
void func(const int x) { //x不可以在内部进行赋值等操作. }
注:当参数为引用传递或者指针传递作为输出时,都不能加const
二、用const修饰函数的返回值##
函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定。
- “值传递”加const修饰没有任何价值。
- ”址传递”加const修饰,函数返回值只能被赋给加const修饰的同类型指针,或者利用const_case转化为去const的常量。
const int* func(void) //函数声明 ... int* a = func(); //报错 int* c = const_cast<int*>(func()); //正确 const int* b = func() //正确
- "引用返回",引用即为const指针,函数返回引用并加const限定后,函数返回的是地址与地址所存的值都被const修饰的指针,存于临时的外部存储单元中,
const int& func(); //函数声明 ... int b = func(); //正确,从外部存储单元中赋值给变量 int& c = func(); //错误,试图在同一个地址中即存储变量又存储常量 int& d = const_cast<int&>(func()); //正确,去const const int& e = func(); //正确
如果上面错误的例子看不懂可以看之前的const修饰符限定的常量指针const与non-const赋值部分。
引用返回总结
引用返回一般很少用,但既然选择引用返回,返回的肯定是一个作用域高于函数作用域的变量的引用,毕竟函数作用域下的变量在函数结束后会释放掉(static这里不考虑)引用即为该变量的const指针,既然选择返回指针,就想通过直接利用指针修改该地址下的变量,所以就更没有必要返回const引用,毕竟const引用的返回值不希望对地址所存的值进行修改。引用返回更常用的方式是:
int& func(); ... int& a = func();
这一可以通过a来改变返回值。
三、const 成员函数##
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。
class test { public: void func(){} int getNum(void) const // const 成员函数 { ++num; // 编译错误,企图修改数据成员m_num func(); // 编译错误,企图调用非const函数 return num; } private: int num; };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)