深入理解C++11:C++11新特性解析与应用

简介: 老牌C++程序猿使用C++99时间较长,对C++11的特性做了系统的学习,摘录了部分认为重要的信息,与大家共勉一起进步。
+关注继续查看

老牌C++程序猿使用C++99时间较长,对C++11的特性做了系统的学习,摘录了部分认为重要的信息,与大家共勉一起进步。

from《深入理解C++11特性》

2.11模板函数的默认模板参数

1、C++98中仅模板类支持默认参数,模板函数不支持默认参数,但C++11中模板类和模板函数均支持默认参数
2、模板类的默认参数,对C++98和C++11中,需遵循“从右往左”的规则指定。
3、模板函数的默认参数,则没有该限制

3.1 继承构造函数

在子类中使用该语法声明继承父类的哪些方法,而不必再写一遍沟通函数
using 父类::函数名;

3.2 委派构造函数

为了区分被调用者和调用者,称为初始化列表中调用“基准版本”的构造函数为委派构造函数(delegating constructor),而被调用的“基准版本”则为目标构造函数(target constructor)。在C++11中,所谓委派构造,就是指委派函数将构造的任务委派给了目标构造函数来完成这样一种类构造的方式。
个人总结:
1、类中的构造函数可以继承其它构造函数,并做扩展。看上去类似调用父类的构造函数。
2、抽象出最为“通用”的行为做目标构造函数。

class Info {
public:
    Info() { InitRest(); }
    Info(int i) : Info() { type = i; }
    Info(char e) : Info() { name = e; }
private:
     void InitRest() { /* 其他初始化 */ }
     int type {1};
     char name {'a'};
     // ....
};

3.6POD类型

C++11将POD划分为两个基本概念的合集,即:平凡的(trivial)和标准布局的(standard layout)
a、平凡的类或结构体符合以下定义:
1)拥有平凡的默认构造函数(trivial constructor)和析构函数(trivial destructor)
2)拥有平凡的拷贝构造函数(trivial copy constructor)和移动构造函数(trivial move constructor)
3)拥有平凡的靠背赋值运算符(trivial assignment operator)和移动赋值运算符(trivial move operator)
4)不能包含虚函数以及虚基类
//使用该辅助的类模板判断
template struct std::is_trivial;

b、标准布局
1)所有非静态成员有相同的访问权限(public,private,protected)
2)在类或者结构体继承时,满足以下两种情况之一
a、派生类中有非静态成员,且只有一个仅包含静态成员的基类。
b、基类有非静态成员,而派生类没有非静态成员。
3)类中第一个非静态成员的类型与其基类不同。
4)没有虚函数和虚基类。
5)所有非静态数据成员均符合标准布局类型,其基类也符合标准布局。这是一个递归的定义。

6.3 C++11中的memory_order枚举值

枚举值 定义规则
memory_order_relaxed 不对执行顺序做任何保证
memory_order_acquire 本线程中,所有后续的读操作必须在本条原子操作完成后执行
memory_order_release 本线程中,所有之前的写操作完成后才能执行本条原子操作
memory_order_acq_rel 同时包含memory_order_acquire和memory_order_release标记
memory_order_consume 本线程中,所有后续的有关本原子类型的操作,必须在本条原子操作完成之后执行
memory_order_seq_cst 全部存取都按顺序执行
目录
相关文章
|
26天前
|
算法 开发者 容器
C++14新特性扫盲探究
闲暇之时,聊到C++14,实际上C++14相对之前的11并没有太大的改动,或者说更像C++11标准基础上的查漏补缺,C++14之后,还有17、20甚至23,所以说,C++14更像个过渡版本。
|
26天前
|
容器
C++17新特性之try_emplace与insert_or_assign
由于std::map中,元素的key是唯一的,我们经常遇到这样的场景,向map中插入元素时,先检测map指定的key是否存在,不存在时才做插入操作,如果存在,直接取出来使用,或者key不存在时,做插入操作,存在时做更新操作。
|
26天前
C++17新特性之std::string_view
std::string_view系C++17标准发布后新增的内容,类成员变量包含两个部分:字符串指针和字符串长度,相比std::string, std::string_view涵盖了std::string的所有只读接口。如果生成的std::string无需进行修改操作,可以把std::string转换为std::string_view,std::string_view记录了对应的字符串指针和偏移位置,无需管理内存,相对std::string拥有一份字符串拷贝,如字符串查找和拷贝,效率更高。
C++17新特性之std::string_view
|
26天前
|
编译器 C++
C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
|
26天前
|
C++
C++11新特性探索:原始字符串字面值(raw string literal)
原始字符串字面值(raw string literal)是C++11引入的新特性。
|
1月前
|
存储 编译器 C++
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(四)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
63 0
|
1月前
|
存储 安全 编译器
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(三)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
41 0
|
1月前
|
编译器 程序员 C++
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
82 0
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(二)
|
1月前
|
存储 安全 编译器
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!(一)
2023-4-6-C++11、C++14、C++17、C++20版本新特性系统全面的学习!
89 0
|
2月前
|
存储 安全 程序员
【C++11】C++11新特性
C++11相对于C++98的部分更新
相关产品
云迁移中心
推荐文章
更多