首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++汽车与汽车&

C++汽车与汽车&
EN

Stack Overflow用户
提问于 2013-12-30 03:23:28
回答 2查看 7.4K关注 0票数 11

如果我有一个功能:

代码语言:javascript
运行
复制
Foo& Bar()
{
   return /// do something to create a non-temp Foo here and return a reference to it
}

为什么要这样:

代码语言:javascript
运行
复制
auto x = Bar(); /// probably calls copy ctor - haven't checked

跟这个不一样?

代码语言:javascript
运行
复制
auto &x = Bar(); /// actually get a reference here

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

如果我显式地将x类型指定为值或引用,我将得到我所期望的(当然)。不过,我希望auto会编译成Bar()的返回类型,在本例中,它是一个引用。

这里有FooFoo&之间的隐式转换吗?

(虽然我已经厌倦了阅读委员会的发言,但规范参考被接受了。)

(第二次使用时间机器将使C++在默认情况下通过引用。带有用于编译C代码的#pragma compatibility触发器。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-30 03:27:56

auto的类型演绎与模板的工作原理完全相同:

  • 当您推断auto时,您将得到一个值类型。
  • 当您推断auto&时,您将得到一个非const引用类型。
  • 当您推断const auto&时,您将得到一个const引用
  • 当你推断出auto&&时,你会得到
    • 如果指定非const引用,则为非const引用。
    • 如果指定const引用,则为const引用。
    • 分配临时值时的值。

票数 29
EN

Stack Overflow用户

发布于 2013-12-30 03:27:19

直接取自Herb的blog post

auto的意思是“正确地选择右边的类型,但是去掉顶级的const/volatile和&”。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20832862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档