auto 和 decltype
1 auto
auto 的功能是类型推断,它使用的是模板类型推导的机制,auto 会被一个虚构的模板类型参数T替代,然后进行推断。
例如下面的 auto x = 5,编译器就会认为它有一个模板 func_for_x,从而去推断出T的类型。
1 2 3 4 | template < typename T> void func_for_x(T param); auto x = 5; |
然而在某些方面,auto 和模板类型推导存在着不同,当使用列表初始化时,auto 会将其推断为 std::initializer_list<int>。
1 | auto x{1, 2, 3}; |
但是如果用模板类型推导是推导不出来的:
1 2 3 4 | template < typename T> void f(T param); f({ 11, 23, 9 }); |
在C++14中允许 auto 作为返回类型,在该情况下 auto 又是使用的模板类型推导机制,也就说如果直接返回列表是会出错的。
1 2 3 | auto createInitList(){ return { 1, 2, 3 }; } |
2 decltype
当需要某个表达式的返回值类型而又不想实际执行它时可以用decltype。
1 2 3 | int a = 2, b = 3; auto c = a + b; decltype (a + b) d ; |
另外 decltype 可用于声明返回值类型依赖于其参数类型的模板函数,即结合 auto 使用尾随返回类型。
3 auto 和 decltype 的一些特性
- auto定义的变量必须有初始值。
- auto会消除const和引用,decltype不会消除const和引用。
- C++14 中的decltype(auto)中的auto是一个占位符,相当于将表达式带入auto然后再用decltype规则进行推断。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2019-03-24 MapReduce实现PageRank算法(邻接矩阵法)