C++ Auto vs Auto&
C++ auto vs auto&
如果我有一个函数:
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
触发器。哎呀。
auto
的类型推导与模板的工作方式完全相同:
- 当你推导出
auto
你会得到一个值类型。 - 当你推导出
auto&
你会得到一个非常量引用类型 - 当你推导出
const auto&
你会得到一个常量参考 - 当你推断
auto&&
你会得到- 非常量参照(如果指定非常量参照) 常量引用
- (如果指定常量引用)
- 分配临时值时的值
直接取自Herb Sutter的博客文章:
auto 的意思是"完全采用右侧的类型,但去除顶级常量/易失性和 &/&&"。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- 在 VS Code 中编码时不能在 C++ 中使用 auto 关键字
- C++ Auto vs Auto&
- decltype vs auto
- 在 C++11 中使用 auto foo = "bar" vs std::string
- 在使用auto时初始化结构会导致VS 2013中的副本
- ' auto x = type{…} '初始化语法和'显式'转换操作符- clang vs gcc
- 无法在VS 14 CTP中使用auto声明lambda:类型为'void'的条件表达式是非法的
- c++ 11自动变量:float数组vs auto