侯捷c++11&14新标准

文章目录

  • 侯捷c++11&14新标准
    • 引言
    • variadic templates
    • Spaces in Template Expressions
      • nullptr
      • auto
      • 初始化(initializer_list<>)
      • explicit(for ctors taking more than one argument)
      • Range-based for statement
      • 全局函数 begin() end()
      • =default =delete
      • Alias Template 化名
      • template template parameter
      • Type Alias, noexcept, override, final
        • Type Alias
        • noexcept
        • override
        • final
      • decltype
      • Lambdas
      • Variadic Templates
    • 标准库
      • Rvalue reference
      • array forward_list
      • Hashtable
      • Hash function
      • tuple

引言

新特性包括语言和标准库两个部分

标准库是以头文件的形式呈现(不加.h)

cplusplus.com

variadic templates

Spaces in Template Expressions

nullptr

nullptr代替 0或者NULL

auto

不确定变量类型 让编译器自己推

比如:代替迭代器、lambda表达式

初始化(initializer_list<>)

变量的后面直接放大括号

int values[]{1, 2, 3}

initializer_list val {?, ?, ?, …} 用一个array来接收 其实是保存头指针

cout << max({ 1, 2, 3 }) << " " << min({string(“a”), string(“b”), string(“c”) }) << endl;

explicit(for ctors taking more than one argument)

2.0之前让编译器不要自作主张

#include <iostream>
using namespace std;class A
{
public://这里用explicit关键词来修饰类构造函数.explicit A(int i = 5, int j = 10){m_a = i;m_b = j;}
private:int m_a;int m_b;
};int main()
{A s;//这样直接赋值,会被提示错误,因为explicit抑制隐式转换的进行s = 10;//这样会报错!!!//当然显示转换还是可以的.s = A(20);system("pause");return 0;
}

Range-based for statement

for(dec1 : col){statement
}

全局函数 begin() end()

e.g. begin(vector…) 相当于 vector.begin()

=default =delete

=default 表示子类直接继承父类

=delete 表示子类不写这个函数

有指针的类就有big three(即默认构造,拷贝构造,析构)

Alias Template 化名

template<typename T>
using Vec = vector<T, MyAllo<T>>;
Vec<int> coll;
等价于
vector<int, MyAllo<int>> coll;

template template parameter

template<typename T, template typename Container>

template<typename T, template<typename U> typename Container>
class XCls{private:container<T> c;
};
template<typename T>
class test{private:T t;
};
template<typename T>
using mlst = list<T, allocator<T>>;// Alias Template 化名int main(){XCls<string, test> myContain;// XCls<string, list> mylist; // 错误 因为list中有两个参数XCls<string, mlst> mylist;
}

Type Alias, noexcept, override, final

Type Alias
using func = void (*)(int, int);
//等价于
typedef void (*func)(int, int);
noexcept
void foo() noexcept(true){}// 不抛出异常
// move过程中不抛出异常,让程序放心。有move的时候程序有限调用move 而不是copy construct
MyString(MyString&& str) noexcept{}
MyString& operator=(MyString&& str) noexcept{}
override

帮助编译器检查是否为重写

final
class Base1 final{};// 没有人能继承Base1
virtural void f() final{};// 没有人能重写f()

decltype

获得变量类型

map<string, float> coll;
decltype(coll)::value_type elem;
// 相当于map<string, float>::value_type elem;Template<typename T1, typename T2>
auto add(T1 a, T2, b) -> decltype(a + b)

Lambdas

[&id]()mutable{++id;}// 才能改变id值
int tobefound = 5;
auto lambda1 = [tobefound](int val) {return val == tobefound; };
cout << lambda1(5) << " " << lambda1(10) << endl;

属于inline内联函数

Variadic Templates

递归

void func(){}
template<typename T, typename... Types>
void func(const T& firstArg, const Types& ...args){func(args...);
}
template<typename... Value>
class tuple{
public:size_t seed = 0;tuple(const Value&... args){tuple(seed, args...)}
};// 特化
template<>
class tuple<>{};template<typename Head, typename... Tail>
class tuple<Head, Tail...>:private tuple<Tail...>{typedef tuple<Tail...> inherited;
protect:Head m_head;
public:tuple(){};tuple(Head v, Tail... vtail):m_head(v), inherited(vtail){}// typename Head::type head(){return m_head};auto head()->decltype(m_head){return m_head};inherited& tail(){return* this;}
}

标准库

Rvalue reference

copy 和 move

insert(cons_iterator _position, const value_type& _x);
insert(cons_iterator _position, const value_type&& _x);
关键字 move forward才能完美转移

array forward_list

array数组 int a[10]; int* a = new int [10]

forward_list就是list改成单项列表

Hashtable

Hash function

tuple

tuple<int, float, string> t1(41, 6.3, "nice");
get<0>(t1);  get<1>(t1);  get<2>(t1);
auto t2 = make_tuple(41, 6.3, "nice");
get<1>(t1) = get<>(t2);
t1 = t2;

侯捷c++1114新标准相关推荐

  1. [侯捷 C++内存管理] 标准分配器实现

    [侯捷 C++内存管理] 标准分配器实现 文章目录 [侯捷 C++内存管理] 标准分配器实现 VC6 标准分配器之实现 VC6 malloc() VC6 allocator BC5 标准库分配器之实现 ...

  2. 【侯捷】C++STL标准库与泛型编程(第二讲)

    第二讲 应具备的基础 C++基本语法 模板(Template)基础 令你事半功倍 数据结构(Data Structures)和算法(Algorithms)概念 令你如鱼得水 书籍: <Algor ...

  3. 【侯捷】C++STL标准库与泛型编程(第三讲)

    第三讲 算法的形式 C++标准库的算法,是什么东西? 说明: 算法Algorithm 是个 function template,标准库中的算法都长成如下这样: template<typename ...

  4. 【侯捷】C++STL标准库与泛型编程(第一讲)

    前言 所谓Generic Programming(GP,泛型编程),就是使用 template(模板)为主要工具来编写程序.本课程第二讲开宗明义阐述了 GP 与 OOP(Object Oriented ...

  5. 【侯捷】C++STL标准库与泛型编程(第四讲)

    第四讲 1.一个万用的Hash Function 说明: 1.1 针对自定义类型的哈希函数的编写方式 自定义类型: #include <functional> class Customer ...

  6. C++11新特性选讲 语言部分 侯捷

    C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...

  7. 侯捷C++八部曲笔记(四、C++2.0新特性)

    侯捷C++八部曲笔记(四.C++2.0新特性) 关键字 noexcept override final decltype =default, =delete nullptr auto explicit ...

  8. 侯捷C++课程笔记03: STL标准库与泛型编程

    本笔记根据侯捷老师的课程整理而来:STL标准库与泛型编程 pdf版本笔记的下载地址: 笔记03_STL标准库与泛型编程,排版更美观一点(访问密码:3834) 侯捷C++课程笔记03: STL标准库与泛 ...

  9. C++标准库(第2版)(侯捷译)PDF

    C++标准库(第2版)(侯捷译)PDF下载地址: https://pan.baidu.com/s/1HmRjuUUTRF7_feyo3mXoAg 提取码: cnze 资源全部收集于互联网,分享目的仅供 ...

  10. 一、C++面向对象高级编程(上) (侯捷)

    侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...

最新文章

  1. 2021全球开放数据应用创新大赛开启,300万+奖金等你来拿!
  2. 带来高收入的三大竞争力技巧,可以涨到40W了!
  3. halcon旋转后坐标_基于FPGA的图像旋转设计
  4. PL/SQL复合数据类型
  5. 给公司的电脑配置theano
  6. java类、抽象类、接口的继承规则
  7. BUG(0):用某位表示特定属性
  8. macOS Monterey更新后遇到的bug问题汇总与解决
  9. 数字证书的基础知识(转)
  10. 超赞!设计师完全自学指南
  11. 如何撤回 Gmail 已发送的邮件
  12. 今生,只想做一个平凡的人
  13. Kotlin的协程:挂起函数
  14. python作者的诗_《全唐诗》Python文本分析
  15. 如何安装打印机驱动程序
  16. 使用shiro+aop实现权限控制
  17. js实现拼音模糊搜索
  18. 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)
  19. Web前端开发学习笔记(2)(css3新特性)
  20. linux 打开终端自动运行脚本.barshrc

热门文章

  1. 虚幻引擎4控制台变量和命令
  2. MacOS下解决宿主机和docker容器之间网络互通
  3. 记录一个非常实用的gif制作工具licecap
  4. 中央处理器cpu中的什么是计算机的指挥中,计算机中央处理器CPU的组成有哪些
  5. macos系统镜像iso_系统原装ISO镜像软碟通刻录启动U盘教程
  6. 基于AD9854个和MSP430的波形发生器
  7. NetGear stora 重置成功后,个人文件夹丢失的找回办法
  8. java 消息提醒_JAVA怎么样实现即时消息提醒
  9. 自动驾驶中的多传感器融合
  10. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-20期...