【C++】C++11中的常见语法(上)

2024-02-26 1389阅读

温馨提示:这篇文章已超过390天没有更新,请注意相关的内容是否还可用!

C++11

  • 一、C++11简介
  • 二、统一的列表初始化
    • 1.{}初始化
    • 2. std::initializer_list
    • 三、声明
      • 1. auto
      • 2. decltype
      • 3. nullptr
      • 四、右值引用和移动语义
        • 1. 左值引用和右值引用
        • 2. 左值引用与右值引用比较
        • 3. 右值引用使用场景和意义
        • 4. 右值引用引用左值及其一些更深入的使用场景分析
        • 5. 完美转发
        • 五、新的类功能
          • 1. 默认成员函数
          • 2. 类成员变量初始化
          • 3. 强制生成默认函数的关键字 default
          • 4. 禁止生成默认函数的关键字 delete
          • 5. 继承和多态中的 final 与 override 关键字

            一、C++11简介

            在 2003 年 C++ 标准委员会曾经提交了一份技术勘误表(简称TC1),使得 C++03 这个名字已经取代了 C++98 称为 C++11 之前的最新 C++ 标准名称。不过由于 C++03(TC1) 主要是对 C++98 标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为 C++98/03 标准。

            从 C++0x 到 C++11,C++ 标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于 C++98/03,C++11 则带来了数量可观的变化,其中包含了约 140 个新特性,以及对 C++03 标准中约 600 个缺陷的修正,这使得 C++11 更像是从 C++98/03 中孕育出的一种新语言。相比较而言,C++11 能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11 增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本章主要讲解实际中比较实用的语法。

            C++11的来源:1998年是 C++ 标准委员会成立的第一年,本来计划以后每 5 年视实际需要更新一次标准,C++ 国际标准委员会在研究 C++03 的下一个版本的时候,一开始计划是 2007 年发布,所以最初这个标准叫 C++07。但是到06年的时候,官方觉得2007年肯定完不成 C++07,而且官方觉得 2008 年可能也完不成。最后干脆叫C++ 0x。x 的意思是不知道到底能在07还是08还是09年完成。结果 2010 年的时候也没完成,最后在2011年终于完成了 C++ 标准。所以最终定名为C++11。

            二、统一的列表初始化

            1.{}初始化

            在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如:

            			struct Point
            			{
            				int _x;
            				int _y;
            			};
            			
            			int main()
            			{
            				int array1[] = { 1,2,3,4,5 };
            				int array2[5] = { 0 };
            			
            				Point p = { 0, 1 };
            			
            				return 0;
            			}
            

            C++11 扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。

            			struct Point
            			{
            				int _x;
            				int _y;
            			};
            			
            			int main()
            			{
            				int array1[]{ 1,2,3,4,5 };
            				int array2[5]{ 0 };
            			
            				Point p{ 0, 1 };
            			
            				// C++11中列表初始化也可以适用于new表达式中
            				int* pa = new int[4]{ 1,2,3,4 };
            			
            				return 0;
            			}
            

            创建对象时也可以使用列表初始化方式调用构造函数初始化。

            			class Date
            			{
            			public:
            				Date(int year, int month, int day)
            					:_year(year)
            					, _month(month)
            					, _day(day)
            				{
            					cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]