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,提问作者Валентин Никин
相关产品推荐
相关产品推荐

