C++中三种模板对象引用声明的区别是什么?
C++模板对象引用声明的区别分析
第一个声明:template<typename T> void myFunction(Object<T>& const obj);
这是语法错误。在C++中,引用本身的绑定关系是不可变更的——引用一旦初始化绑定到某个对象,就无法再指向其他对象,因此给引用添加const修饰是无意义且不符合语法规则的,编译器会直接报错。
第二个与第三个声明
template<typename T> void myFunction(const Object<T>& obj);
和template<typename T> void myFunction(Object<T> const & obj);
这两个声明完全等价,都是定义了一个指向const Object<T>类型的左值引用参数,具备以下特性:
- 无法通过该引用修改所绑定的
Object<T>对象的普通成员(除非成员被mutable修饰) - 可以兼容多种绑定场景:const修饰的
Object<T>对象、非const的Object<T>对象、临时生成的Object<T>对象(比如函数返回的临时实例)
内容的提问来源于stack exchange,提问作者shashashamti2008
相关产品推荐
相关产品推荐

