1. 语言特性
1.1 常量
nullptr代替NULL
传统C++会把NULL,0视为同一个东西,有些定义((void*)0),有些会定义为0,但是有问题:
- C++不允许void * 隐式类型转换,void* 0
- 0会给C++重载特性带来混乱
constexpr
明确声明函数或者对象在编译期会成为常量表达式, C++14开始,constexpr函数可以使用局部变量、循环、分支等简单语句。
1 | constexpr int fibonacci(const int n) { |
nullptr代替NULL
传统C++会把NULL,0视为同一个东西,有些定义((void*)0),有些会定义为0,但是有问题:
constexpr
明确声明函数或者对象在编译期会成为常量表达式, C++14开始,constexpr函数可以使用局部变量、循环、分支等简单语句。
1 | constexpr int fibonacci(const int n) { |
目的是熟悉一下C++,这里的提交需要注意一下格式,比如statement必须在{}之间的要求等等,否则gradescope通过不了。我的第一次提交就有这样的问题,这个评测系统对于格式的要求很高。
GDB:
顺便复习了一下智能指针:
unique_ptr<T>
指向对象,不支持拷贝赋值shared_ptr<T>
可以拷贝赋值,内有自己的计数器nullptr而不是null
使用auto只要清晰
统一的初始化语法,使用列表初始化{}
利用STL,通常情况下没有特别理由不要自己定义已经实现了的数据结构和算法
数组
在一个有界网络中,每个node传播message给随机的几个节点,经过杂乱无章的通信,最终所有节点都会达成一致。每个节点有可能知道所有的节点,也可能仅仅知道几个邻居节点,最后状态都是一致的,又称为反熵。
两个概念
Goosip 和 raft
raft是强一致性的,而gossip是最终一致