Directory
在for range循环中遇到了auto&& i
和auto& i
时,结果相同的情况,因此研究一下
for(auto&& i : s) {
}
Reference
What is the advantage of using universal references in range-based for loops?
auto
让编译器识别分析表达式所属的类型
- 引用传递的是引用的对象
- 一般忽略顶层const,保留底层const
- 初始值必须为同一类型
auto和auto &&
- 当需要使用一个局部备份时使用
auto
, - 当不关心目标为局部或其他时,使用
auto&&
。一般来说,会产生一个引用,但如果是一个临时变量(函数返回值),会生成局部变量。
auto&&
不保证目标可变,当给定一个const
目标或引用时,会生成const
变量。依赖于上下文
实例
const int ci = 42; // 不能改变 ci 的值,这是一个顶层 const
int &r = ci; // 错误:普通的 int& 不能绑定到 int 常量上
auto c = ci; //c 是一个整数,忽略了顶层const属性
auto &g = ci; // g是一个整型常量引用,绑定到ci
如上,int类型的引用不能直接绑定到const int类型上,但auto &可以。auto类型在变量自动转换会忽略顶层const属性。
auto& 和 auto const &
auto&
保证为引用,不会是临时变量auto const &
与auto&&
相似,但为只读变量。
上一篇 C++ Primer 5th Ch03字符串向量和数组
下一篇 声明与定义