如果我有一个功能:
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()
的返回类型,在本例中,它是一个引用。
这里有Foo
和Foo&
之间的隐式转换吗?
(虽然我已经厌倦了阅读委员会的发言,但规范参考被接受了。)
(第二次使用时间机器将使C++在默认情况下通过引用。带有用于编译C代码的#pragma compatibility
触发器。)
发布于 2013-12-30 03:27:56
auto
的类型演绎与模板的工作原理完全相同:
auto
时,您将得到一个值类型。auto&
时,您将得到一个非const引用类型。const auto&
时,您将得到一个const引用auto&&
时,你会得到
发布于 2013-12-30 03:27:19
直接取自Herb的blog post:
auto的意思是“正确地选择右边的类型,但是去掉顶级的const/volatile和&”。
https://stackoverflow.com/questions/20832862
复制相似问题