You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数签名中const关键字不同放置位置的区别是什么

三个C++函数签名的差异说明
  • 前两个签名void func(const std::shared_ptr<TestStruct>& ts) 和 void func(std::shared_ptr<TestStruct> const& ts) 完全等价

    C++语法中,const关键字修饰普通类型时,放在类型左侧和右侧效果一致:const T& 和 T const& 都表示「指向const T类型的左值引用」。这两个签名的含义都是:函数接收一个std::shared_ptr<TestStruct>类型的const左值引用,函数内部不允许修改传入的shared_ptr本身(比如无法调用ts.reset()、给ts赋值其他shared_ptr等操作),但可以修改ts指向的TestStruct对象的内容,因为const仅修饰shared_ptr实例本身,不涉及它指向的堆内存对象。

  • 第三个签名void func(std::shared_ptr<TestStruct> &const ts) 是非法语法,无法通过编译

    C++中的引用本身天生就是不可重新绑定的,不存在“顶层const修饰的引用”这种语法,&const属于错误写法,编译器会直接抛出语法错误。

内容的提问来源于stack exchange,提问作者Валентин Никин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:02