您当前的位置: 首页 >  c++
  • 5浏览

    0关注

    322博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++11新特性精讲(多线程除外)

森明帮大于黑虎帮 发布时间:2022-10-04 23:34:36 ,浏览量:5

文章目录
  • 1、什么是 C+11
  • 2、类型推导
      • 2.1 auto的使用
      • 2.2 auto的易错点
      • 2.3 decltype
      • 2.4 追踪返回类型
  • 3、易用性的改进
      • 3.1 初始化
        • 3.1.1 类中内成员变量初始化
        • 3.1.2 列表初始化
        • 3.1.3 防止类型收缩
      • 3.2 基于范围的for循环
      • 3.3 静态断言
      • 3.4 noexcept 修饰符(vs2013 不支持)
      • 3.5 nullptr
      • 3.6 强类型枚举
      • 3.6 常量表达式(vs2013 不支持)
        • 3.6.1
        • 3.6.2 constexpr 函数的限制
        • 3.6.3 类中成员函数是常量表达式
      • 3.7 用户定义字面量(vs2013 不支持)
      • 3.8 原生字符串字面值 (原始字符串字面值 )
  • 4、类的改进
      • 4.1 继承构造(vs2013 不支持)
      • 4.2 委托构造
      • 4.3 继承控制: final 和 override
        • 4.3.1 final 阻止类的进一步派生和虚函数的进一步重写
        • 4.3.2 override 确保在派生类中声明的函数跟基类的虚函数有相同的签名
      • 4.4 类默认函数的控制: "=default" 和 "=delete"函数
        • 4.4.1 "=default"函数
        • 4.4.2 "=delete"函数
  • 5、模板的改进
      • 5.1 右尖括号 > 的改进
      • 5.2 模板的别名
      • 5.3 函数模板的默认模板参数
  • 6、可变参数的模板
  • 6.1 可变参数模板函数
        • 6.1.1 可变参数模板函数的定义
        • 6.1.2参数包的展开
          • 6.1.2.1 递归方式展开
          • 6.1.2.2 非递归方式展开
      • 6.2 可变参数模板类
        • 6.2.1继承方式展开参数包
        • 6.2.2 模板递归和特化方式展开参数包
  • 7 、 右值引用
      • 7.1 左值引用、 右值引用
        • 7.1.1 左值、 右值
        • 7.1.2 右值引用概念
        • 7.1.3 左值引用、 右值引用
        • 7.1.4 引用与右值引用比较
        • 7.1.5 值的形式返回对象的缺陷
        • 7.1.6 返回值优化技术
      • 7.2移动语义
        • 7.2.1 为什么需要移动语义
        • 7.2.2 移动语义定义
        • 7.2.3 移动构造函数
        • 7.2.4 移动赋值运算符重载函数
      • 7.3 标准库函数move---右值引用左值
      • 7.4 完美转发 std::forward
      • 7.5 右值引用作用
      • 7.6 explicit关键字
  • 8、 智能指针
      • 8.1 RAII
      • 8.2 C++98中的auto_ptr
      • 8.3 unique_ptr
      • 8.4 shared_ptr
      • 8.5 weak_prt
  • 9、 闭包的实现
      • 9.1什么是闭包
      • 9.2 闭包的实现
        • 9.2.1 仿函数:重载 operator()
        • 9.2.2 std::bind 绑定器
          • 9.2.2.1 std::function
          • 9.2.2.2 std::bind
          • 9.2.2.3 std::bind 和 std::function的配合使用
        • 9.2.3 lambda表达式
          • 9.2.3.1 lambad 基础使用
          • 9.2.3.2 lambad与仿函数
          • 9.2.3.3 lambda类型
          • 9.2.3.4 lambad优势

1、什么是 C+11
  • C++11 标准为 C++编程语言的第三个官方标准, 正式名叫 ISO/IEC 14882:2011 - Information technology -Programming languages – C++。 在正式标准发布前, 原名 C++0x。 它将取代 C++标准第二版 ISO/IEC 14882:2003 - Programming languages – C++成为 C++语言新标准。

  • C++11 是对目前 C++语言的扩展和修正, C++11 不仅包含核心语言的新机能, 而且扩展了 C++的标准程序库(STL) , 并入了大部分的 C++ Technical Report 1(TR1) 程序库(数学 的特殊函数除外)。

  • C++11 包括大量的新特性: 包括 lambda 表达式, 类型推导关键字 auto、 decltype, 和模板 的大量改进。

1、Qt Creator 新建一个纯C++的项目,在项目文件配置:CONFIG += c++11
2、终端,g++ xxx.cpp  -std=c++11
2、类型推导 2.1 auto的使用
  • auto的自动类型推导,用于初始化表达式中推断出变量的数据类型。从这个意义上讲,auto并非一种"类型"声明,而是一个类型声明时的"占位符",编译器在编译时期会将auto替换为变量实际的类型。
  • 通过auto的自动类型推导,可以大大简化我们的编程工作。
在C中,auto修饰局部变量,局部变量也叫auto变量,自动变量
{
	int a;
	auto int a;
}

C++11, auto根据用户初始化内容自动推导类型

auto使用代码

#include 
#include

double foo(){
    //...
}

//自定义类型:结构体、枚举、联合体
//struct是声明结构体类型时所必须使用的关键字
//Test是结构体名字
struct Test{
    int a;
};

void func(std::vector& tmp){
    //自动推导i的类型
    for(auto i=tmp.begin();i            
关注
打赏
1664288938
查看更多评论
0.0475s