作用:返回表达式或变量的类型 返回值规则: 若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T& 若e是一个临终值(xvalue),则返回值为T&& 若e是一个纯右值(prvalue),则返回值为T decltype()不会执行括号内的表达式,decltype返回的类型是用于声明的,不能用于单纯的判断。比如decltype(a)==int,是不可以的,只能是在定义新的变量、返回值的地方使用: int a=1; decltype(a) b (等价于int b) 若是给变量加多了1个括号,则会成为一个表达式。 int a = 1; int b=2; d C++11是C++语言的一个重要版本更新,引入了许多新特性以提升代码的效率、安全性和可读性。在本文中,我们将聚焦三个关键特性:`decltype`、类内初始化以及列表初始化返回值。 `decltype`是一个类型推断关键字,它允许程序员根据表达式的类型来声明一个新的类型。其基本规则如下: 1. 如果表达式`e`是一个左值(lvalue),`decltype(e)`将返回`T&`,即表达式的引用类型。 2. 如果`e`是一个临界值(xvalue),返回`T&&`,通常是右值引用。 3. 如果`e`是一个纯右值(prvalue),返回`T`,即表达式的非引用类型。 `decltype`并不会实际执行括号内的表达式,而是仅仅分析其类型。因此,它不能用于直接进行类型比较,如`decltype(a) == int`是非法的。它主要用在声明新变量或返回值类型的地方,例如: ```cpp int a = 1; decltype(a) b; // 等同于 int b ``` 要注意,如果对变量加一层额外的括号,`decltype`会将其视为一个表达式,可能导致不同的结果。例如: ```cpp int a = 1; int b = 2; decltype((a)) d = b; // decltype((a)) 是 int&,因为加了括号的 a 成为了一个 lvalue ``` 接下来,C++11引入了类内初始化,允许在类定义中直接初始化非静态数据成员。以前,非const的静态成员之外的所有数据成员都需要在构造函数中初始化。但现在,你可以这样做: ```cpp class A { public: int num = 2; // C++11允许在类内初始化,前提是值必须是常量表达式 }; ``` 类内初始化的顺序优先于构造函数初始化列表,但构造函数的初始化会覆盖类内初始化。这意味着即使类内有初始化,构造函数仍然能按预期进行数据成员的赋值。 列表初始化返回值是C++11中的另一个改进。在旧版本中,返回一组数据通常需要先创建一个容器,然后返回。但在C++11之后,可以直接返回一个字面值列表,这会自动用来构造一个适当的容器: ```cpp vector<int> process() { return {1, 2, 3, 4}; // 直接返回列表初始化的字面值 } ``` 这种方法简化了代码,减少了不必要的临时对象创建。 `decltype`提供了类型推断的能力,使我们能够更灵活地声明变量和函数返回类型;类内初始化简化了数据成员的初始化过程;而列表初始化返回值则优化了容器的返回方式。这些特性共同提升了C++11的编程体验,使得代码更加简洁、高效。理解并掌握这些特性对于任何C++开发者来说都是至关重要的。



























- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电气自动化技术专业教学团队推荐表.doc
- 2023年公共关系学网络终考题库2.doc
- 移动通信技术的发展.doc
- 计算机网络技术专业培养计划.doc
- 商业计划书(上海润金软件有限公司交易助理项目).doc
- 医学统计学第十六章--Logistic回归分析.ppt
- 基于PLC的自动摆饼机控制系统的设计及实现(顾小强).ppt
- 粤教版网络技术应用教材与教学研讨市公开课一等奖百校联赛特等奖课件.pptx
- 互联网金融个体网络借贷资金存管业务规范.docx
- 解读云计算与云数据存储发展趋势技术研究.doc
- 综合布线建设方案.doc
- 基于C51单片机的数字时钟课程设计C语言,带闹钟.doc
- 谭浩强C语言第13章.ppt
- 大学生网络利用调查报告.doc
- 2023年学员做试卷中小学教师融合教育知识网络竞赛.docx
- 互联网项目商业计划书模板.doc


