关于C++中->decltype()含义及MaxElement赋值操作的疑问
关于MaxElement函数的两个疑问解答
1. ->decltype(c[0]) 的作用
这是C++11引入的尾返回类型语法,核心作用是推导模板函数的返回值类型:
- 因为这是模板函数,参数
Container是泛型类型,编译阶段无法提前确定容器内元素的具体类型; decltype(c[0])会在编译时推导c[0]的实际类型——对于vector<int>这类容器,operator[]返回的是元素的左值引用(即int&),所以函数的返回值类型就是int&;- 如果省略这个尾返回类型,直接写
auto MaxElement(...),在C++11中auto会默认推导出值类型(比如int),此时函数返回的是元素的副本,后续无法对返回值执行赋值操作。
2. 为什么可以执行 MaxElement(v,v.size())=10
本质原因是函数返回的是容器元素的左值引用:
- 函数内部
return c[index],而容器的operator[]返回的是对应位置元素的引用(不是副本); - 尾返回类型
decltype(c[0])保留了这个引用属性,所以MaxElement最终返回的是原容器中最大元素的左值引用——左值代表可修改的内存对象,因此直接对返回值赋值,等价于修改原容器中对应位置的元素; - 对应你的代码例子:初始
v是[7,5],MaxElement返回v[0]的引用,赋值10后,原容器的第一个元素被改成10,最终输出10 5。
内容的提问来源于stack exchange,提问作者bb_823
相关产品推荐
相关产品推荐

