| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> c++新特性-auto类型推导 -> 正文阅读 |
|
[C++知识库]c++新特性-auto类型推导 |
auto的类型推导相当于模板推导的进阶版,在大部分情况下,auto的推导规则与模板的推导规则是一样的。至于扩展部分等下在讲。注意:如果你还不懂模板的推导规则,请去看我的另一篇关于模板规则的文章。 现在我要先讲两件事,数组和函数类型的退化。 举例
现在我想问问你,array的类型是什么? 答案:int[3]。是你没看错,注意:不是int[]类型,也不是int[1],也不是int[2]。 那么,我的下一个问题就是,为什么一个int[3]类型能赋值给一个int*呢?这在c++的赋值中简直是不可思议的! 答案:int[3]类型退化为了int*类型,所以赋值成功了。 另一个例子
现在我想问问func的类型是什么? 答案:void (int, double)。准确点说func的类型就是void func(int, double)。 那么,我的下一个问题是,为什么一个void*类型能被它赋值呢?它又不是指针。 答案:void (int, double) 退化为了 void* (int, double)。 !!! 现在,我试图向你证明这一点,并试图让你看懂。注意:这并不算在auto的扩展内容中,模板推导也适用。 举例:
!!! 接下来,我们看看auto类型推导相较于模板的类型推导,多出来的部分 在c++11中,我们可以这么赋值
当我用auto进行推导上面的情况时,我们惊奇的发现auto居然不是int!
关于为什么会出现这种情况,我并不想解释太多,你只需要知道是因为{}其实是一个模板,显然它与std::intializer<T>有关。 需要注意的是{}内的类型要一直,不然会出错,因为{}不允许不一致。 当然auto也不是总能好的把{}推导出来,关于函数的时候,它就失效了
这就是auto推导与模板推导不同的地方,其他地方,模板怎么推导,auto就怎么推导。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:40:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |