的笔记

随时随地编辑

涩普拉斯11扯淡大杂烩

淡:
....................

....................

C++11

C++11,先前被称作C++0x,即ISO/IEC 14882:2011
Wikipedia:C++11
Wikipedia: C++ Technical Report 1
C++11/14/17 Features In VS 2015 RTM


右值引用

C++11增加一个新的非常量引用(reference)类型,称作右值引用(R-value reference),标记为T &&。右值引用所绑定的临时对象可以在该临时对象被初始化之后做修改,这是为了允许move语义。(Wikipedia:C++11)

POD

Wikipedia: POD (程序设计)
Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构[1],POD适用于需要明确的数据底层操作的系统中。

说人话:POD是标准委员会的老家伙们搞的一组底层数据标准,想让某些C++对象可以跨平台交互。

Lambda

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


nullptr

C++11引入了新的关键字来代表空指针常量:nullptr,将空指针和整数0的概念拆开。nullptr的类型为nullptr_t,能隐式转换为任何指针或是成员指针的类型,也能和它们进行相等或不等的比较。而nullptr不能隐式转换为整数,也不能和整数做比较。(wikipeida:C++11)
  • 为了向后兼容,0仍可代表空指针常量。


  • 枚举类别的前置声明(forward declaration)

    0000 enum Enum1; // C++與C++11中不合法;無法判別大小
    enum Enum2 : unsigned int; // 合法的C++11
    enum class Enum3; // 合法的C++11,列舉類別使用預設型別int
    enum class Enum4: unsigned int; // 合法的C++11
    enum Enum2 : unsigned short; // 不合法的C++11,Enum2已被聲明為unsigned int


    using别名

    类型别名
    using也能在C++11中定义一般类型的别名,等同typedef:
    typedefvoid(*PFD)(double);   // 傳統語法
    usingPFD=void(*)(double);    // 新增語法

    模板别名
    template< typename first, typename second, int third>
    class SomeType;

    template< typename second>
    using TypedefName = SomeType;


    可变参数模板

    在C++11之前,不论是类模板或是函数模板,都只能按其被声明时所指定的样子,接受一组固定数目的模板参数;C++11加入新的表示法,允许任意个数、任意类别的模板参数,不必在定义时将参数的个数固定。
    template<typename...Values>classtuple;


    使用或禁用对象的默认函数

    传统C++默认构造函数规则: 若用户定义了任何构造函数,编译器便不会生成默认构造函数。
    否则,编译器自动生成四个构造函数:默认构造函数(default constructor)、复制构造函数(copy constructor),赋值运算符(copy assignment operatoroperator=)以及析构函数(destructor)

    C++11允许显式地表明采用或拒用编译器提供的内置函数 structNonCopyable
    {
    NonCopyable&operator=(constNonCopyable&)=delete;
    NonCopyable(constNonCopyable&)=delete;
    NonCopyable()=default;
    };

    = delete的声明(同时也是定义)也能适用于非内置函数,禁止成员函数以特定的形参调用:
    structNoDouble
    {
    voidf(inti);
    voidf(double)=delete;
    };


    static_assert

    想在编译器测试模板参数的特性,只能用static_assert template
    structCheck
    {
    static_assert(sizeof(int)<=sizeof(T),"T is not big enough!");
    };


    hash

    C++11四种散列表,其中差别在于底下两个特性:是否接受具相同键值的项目(Equivalent keys),以及是否会将键值映射到相对应的数据(Associated values)。为避免与第三方库发展的散列表发生名称上的冲突,前缀将采用unordered而非hash。
    散列表类型                        有无关系值   接受相同键值
    std::unordered_set          否               否
    std::unordered_multiset   否               是
    std::unordered_map        是               否
    std::unordered_multimap 是               是

    头文件: <unordered_set>和<unordered_map>

    正则表达式

    头文件:<regex>


    通用智能指针

    shared_ptr是一引用计数(reference-counted)指针,其行为与一般C++指针极为相似。在TR1的实现中,缺少了一些一般指针所拥有的特色,像是别名或是指针运算。C++11新增前述特色。
    一个shared_ptr只有在已经没有任何其它shared_ptr指向其原本所指向对象时,才会销毁该对象。
    一个weak_ptr指向的是一个被shared_ptr所指向的对象。该weak_ptr可以用来决定该对象是否已被销毁。weak_ptr不能被解引用;想要访问其内部所保存的指针,只能透过shared_ptr。有两种方法可达成此目的。第一,类别shared_ptr有一个以weak_ptr为参数的构造函数。第二,类别weak_ptr有一个名为lock的成员函数,其回返值为一个shared_ptr。weak_ptr并不拥有它所指向的对象,因此不影响该对象的销毁与否。


    元编程

    对于那些能自行创建或修改本身或其它程序的程序,我们称之为元编程。这种行为可以发生在编译或运行期。

    XXXX

    0000
  • 0000


  • XXXX

    0000
  • 0000


  • posted on 2019-02-19 10:04 的笔记 阅读(558) 评论(0)  编辑 收藏 引用 所属分类: C++


    只有注册用户登录后才能发表评论。
    网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理