C++ Auto vs Auto&

C++ auto vs auto&

本文关键字:Auto vs C++      更新时间:2023-10-16

如果我有一个函数:

Foo& Bar()
{
   return /// do something to create a non-temp Foo here and return a reference to it
}

这是为什么:

auto x = Bar(); /// probably calls copy ctor - haven't checked

和这个不一样吗?

auto &x = Bar(); /// actually get a reference here

(实际上,我希望第二个版本能够引用引用,这没有什么意义。

如果我明确地将x的类型指定为值或引用,我会得到我所期望的(当然)。不过,我希望auto编译为Bar()的返回类型,在这种情况下,这是一个引用。

FooFoo&之间是否有隐含的投射在这里发挥作用?

(接受规范参考,尽管我已经厌倦了阅读委员会的发言。

(默认情况下,第二次使用时间机器将使C++通过参考传递。带有用于编译 C 代码的#pragma compatibility触发器。哎呀。

auto的类型推导与模板的工作方式完全相同:

  • 当你推导出auto你会得到一个值类型。
  • 当你推导出auto&你会得到一个非常量引用类型
  • 当你推导出const auto&你会得到一个常量参考
  • 当你推断auto&&你会得到
    • 非常量参照(如果指定非常量参照)
    • 常量引用
    • (如果指定常量引用)
    • 分配临时值时的值

直接取自Herb Sutter的博客文章:

auto 的意思是"完全采用右侧的类型,但去除顶级常量/易失性和 &/&&"。