C++11新特性总结

一、概述

C++11新特性包括auto、decltype、constexpr、右值引用、move()函数、完美转发、移动构造、lambda匿名函数、for循环新格式、nullptr、shared_ptr、weak_ptr、unique_ptr、using定义别名、函数模板默认参数、tuple元组、非受限联合体、placement new、longlong int等

二、正文

以下是我在学习过程中记录下来的笔记总结,实际代码较少,大多是知识点,比如相关的特性、定义、限制、作用和说明等等,放上一半的内容,剩下一半在文章底部的资源处,真的是个人用心精简的总结,谢谢支持和理解~~

  • auto类型推导
    • 应用
      1. 定义迭代器
      2. 泛型编程
    • 限制
      1. auto声明的变量必须赋值初始化,因此auto也不能够在函数参数中进行使用,也不能作用于非静态的类成员变量,因为类成员在声明的时候并不能赋值
      2. auto关键字不能定义数组
      3. auto不能用作模板参数
    • 性质
      1. auto 仅仅是一个占位符,在编译器期间它会被真正的类型所替代
      2. 推导不可具有二义性
      3. 当类型不为引用时auto的推导结果不保留表达式的const属性,反之则保留
    • 简介:C++11之前,auto 表示变量是自动存储的,这也是编译器的默认规则,所以写不写都一样;C++11之后,auto 用于自动类型推到,关键字以后,编译器会在编译期间自动推导出变量的类型。

  • decltype(declare type)  基础用法:decltype(exp)  var;
    • 返回值类型后置
      1. 为了解决函数返回值类型依赖于参数而导致难以确定返回值类型的问题
      2. auto decltype结合使用
    • 与auto区别
      1. auto根据赋值推导,decltype根据表达式推导变量类型
      2. auto要求变量必须初始化,而decltype不用
    • 推导规则
      1. 如果是一个普通变量或类成员访问表达式,推导类型和exp一致
      2. 如果是函数调用,和返回值一致
      3. 如果是左值或者括号包围的表达式,推导类型为exp的引用
    • 实际应用
      1. 用于类成员的类型推导
  • 对函数模板默认模板参数的支持(之前只支持类模板默认模板参数)
  • tuple元组
    1. 特点:实例化的对象可以存储任意数量任意类型的数据
  • 列表初始化(统一初始化格式)
  • lambda匿名函数
    1. 格式:

      [外部变量方位方式说明符] (参数) mutable noexcept/throw() -> 返回值类型

      {

              函数体;

      };

    2. 说明
      1. [外部变量方式方位说明符]:[]用于声明当前是lambda表达式,方括号内部注明当前函数体中可以使用哪些外部变量
      2. (参数):和普通函数一样用于传递参数,如果不接收参数可以省略
      3. mutable:以值传递引入的外部变量默认为常量,若要修改它们,则需要使用mutable关键字,可省略
      4. noexcept/throw():默认情况下lambda函数可以抛出任何类型的异常,如果noexcept则不会抛出任何异常,如果throw()可以指定抛出异常的类型,可以省略
      5. ->返回值类型:指定lambda匿名函数的返回值类型。如果函数体内只有一个return或者该函数返回void,则可以省略
      6. 函数体:既可以使用值传递的参数,还可以使用指定的外部变量和全局范围内的所有全局变量,外部变量会受到以值传递还是引用传递方式引入的影响,而全局变量不会,lambda表达式内可以使用并直接修改全局变量的值
    3. 应用示例
      1. 最简单的匿名函数:[]{};
      2. 排序数组sort(num.begin(), num.end(), [=](int x, int y) -> x > y);
      3. 给匿名函数起名字auto display = []{};
  • using定义别名
    1. 作用:给一种类型或者函数模板重新命名,在typedef之上多了模板重命名的功能
  • 非受限联合体(union)
    1. C++联合体中允许非POD类型
    2. POD类型
      1. 不包含虚函数和虚基类
      2. 非静态成员必须声明为public
      3. 没有用户自定义的析构、构造、拷贝函数
    3. placement new
      1. new关键字的一种进阶用法,既可以在堆上生成对象也可以在栈上生成对象
      2. 语法:new(address) ClassConstruct(...);adress表示已有的内存地址,可以是某个变量的引用,ClassConstruct表示调用类的构造函数

最后放出全部内容的资源链接,多谢~~ 

 C++11新特性实用总结word版本-C++文档类资源-CSDN下载主要是C++11新特性的定义,特性,使用限制等,关于具体如何使用新特性的代码不多,大部分是知识内容,更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_44178960/85018835

你可能感兴趣的:(C++,c++)