cpp_milestone - ShenYj/ShenYj.github.io GitHub Wiki

C++标准发展

年份 C++标准 名称
1998 ISO/IEC 14882:1998 C++98
2003 ISO/IEC 14882:2003 C++03
2011 ISO/IEC 14882:2011 C++11
2014 ISO/IEC 14882:2014 C++14
2017 ISO/IEC 14882:2017 C++17
2020 Yet to be determined C++20

C++ Reference

C++11

C11

auto

  • 可以从初始化表达式中推断出变量的类型,大大简化编程工作
  • 属于编译器特性,不影响最终的机器码质量,不影响运行效率
auto i = 10; // int
auto str = "c++"; // const char *
auto p = new Person(); // Person *
p->run();

decltype

  • 可以获取变量的类型
int a = 10;
decltype(a) b = 20; // int

nullptr

空指针

  • 可以解决 NULL 的二义性问题

NULL 在C++中其实就是一个宏定义 #define NULL 0

void func(int v) { }
void func(int *v) { }
// c98中上面两个函数都符合条件,相当于 func(0); 会存在二义性,c11开始 NULL 就被认为整数, 空指针使用 nullptr
func(NULL);     
func(0);
func(nullptr);

cout << (NULL == nullptr) << endl; // 1

快速遍历

int array[] = { 11, 22, 33, 44, 55 };

for (int item: array) {
    cout << item << endl;
}

更简洁的初始化方式

int array[]{ 11, 22, 33, 44, 55 }

Lambda

笔记:C++ Lambda

C++14

C14

泛型 Lambda 表达式

笔记:C++ Lambda

C++17

C17

可以进行初始化的if、switch语句

/// 变量 a、b 的作用域是它所在的if 语句、以及其后面的if-else语句
if (int a = 10; a > 10) {
    /// 不可以访问变量b
    a = 1;
} else if (int b = 20; a > 5 && b > 10) {
    /// 可以访问变量b
    b = 2;
    a = 2;
} else if (0) {
    /// 可以访问变量b
    b = 3;
    a = 3;
} else {
    /// 可以访问变量b
    b = 4;
    a = 4;
}

/// 报错,外界无法使用 a
a = 20;
⚠️ **GitHub.com Fallback** ⚠️