auto&&
auto&&

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?

C++11 auto vs auto& vs auto&&

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字符串向量和数组

下一篇   声明与定义