c++ 11知识点总结

c++ 11 知识点总结

1,constexpr 作用于函数声明,编译期推导返回常量

2,std::initializer_list

1
2
3
4
5
6
7
class SequenceClass
{
public:
SequenceClass(std::initializer_list<int> list);
};
//这将允许SequenceClass由一连串的整数构造,就像:
SequenceClass someVar = {1, 4, 5, 6};

3,统一初始化

1
NewClass var{"aaa?", 3...};

4,类型推导:auto,为了简化表示 如:

1
auto someStrangeCallableType = boost::bind(&SomeFunction, _2, _1, someObject)

5,decltype类型推导,双层括号表引用

1
2
int *ptrTempA = &tempA;
decltype(*ptrTempA) dclTempB; /解引用,必须初始化,故编译不过
decltype和auto都可以用来推断类型,但是二者有几处明显的差异:
    1.auto忽略顶层const,decltype保留顶层const;
    2.对引用操作,auto推断出原有类型,decltype推断出引用;
    3.对解引用操作,auto推断出原有类型,decltype推断出引用;
    4.auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。

6,仿函数就是写个类,然后重载operator(),通过重载()运算符模拟函数形式的类

7,lambda函数是为了简化表示临时的谓词函数,语法:

1
[capture list] (params list) mutable exception-> return type { function body }

捕捉列表参数意义

[] // 沒有定义任何变量。使用未定义变量会导致错误。
[x, &y] // x 以传值方式传入(前提),y 以传引用方式传入。
[&] // 任何被使用到的外部变量皆隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量皆隐式地以传值方式加以引用。
[&, x] // x 显示地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z 显示地以引用方式加以引用。其余变量以传值方式加以引用

8,explicit 单个参数的构造函数不能进行隐式转换 A a = 5;

9,overload override overwrite区别

1.overlode 重载:
同一类中同名不同参
2.override 覆盖:
多态,virtual 同名同参
3.overwrite 隐藏,重写:
父子类, 1)基类virtual ,子类同名不同参
        2)基类不virtual, 同名同参
调用哪个函数依赖指针类型

10,空指针类型nullptr取代NULL

11,enum class:不能与整数比较,类型显式指定,可以前置声明(因为可以确定大小)

12,>> 模板函数中可连写(必须带()以示区分,否则报错)

13,类模板是用来产生模板类的 class template -> template , template class -> class

14,using 当作 typedef 来处理一般类型和类模板的别名

15,变长参数模板

16,新的字符串

17,用户自定义的字面值

18,多任务的支持:

1.多个线程在一个进程中共存的内存模型;
2.为线程之间的交互提供支持

19,default delete

    default:显式让系统为默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符提供函数体
    delete:禁止编译器自动产生某些函数,并不限于构造和析构函数,
示例:
1
2
void f(int i);
template<class T> void f(T) = delete;
除了参数为int之外的函数外,都不允许

20,long long int,表示至少64bit的数

21,允许sizeof操作符作用在类型的数据成员上,无须明确对象

22,线程相关:

1
std::thread std::thread::join std::mutex std::recursive_mutex std::condition_variable std::condtion_variable_any std::async std::future

23,tuple和erlang中的tuple类似

24,share_ptr weak_ptr

25,随机数生成:三种算法,n种分布

26,std::ref和std::cref

1. std::cref是包装const引用的值
2.针对std::bind,std::bind本质是一个函数模板,生成一个函数。而bind采用的是值传递,为了改成引用传递,需要std::returnf,面
3.thread也是,即使函数被声明成引用,也会以值传递的形式生成拷贝,默认将对象拷贝到线程空间。如果希望原始对象改变,则使用std::ref

关于std::bind等,参考C++ 参考手册

本文标题:c++ 11知识点总结

文章作者:2old2die

发布时间:2019年02月23日 - 02:02

最后更新:2019年03月14日 - 02:03

原始链接:http://yoursite.com/2019/02/23/c++11知识点总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

undefined