C++11学习小笔记

C++11

空格

vector<list<list> >; // C++11之前需要一个空格
vector<list<list>>;  // OK 在C++11之后 

nullptr和std::nullptr_t

// 空指针可以设置成 nullptr
void f(int);
void f(void*);
f(0);            // call f(int)
f(NULL);         // call f(int) if NULL == 0
f(nullptr);      // call f(void*) 
typedef decltype(nullptr) nullptr_t; // 所以nullptr_t就是nullptr的类型

decltype

// 用于定义变量而不必关注类型
int i;
decltype(i) a;

类型自动推导

auto a = {1,2}; // a是一个int类型,用于模板和lambda函数的返回值等复杂类型的情况

变量初始化的 标准化,全部都可以用大括号初始化变量,幕后是array结构在支撑

int val[] {1, 2, 3};
vector<int> vec{1, 2, 3};
vector<string> cites{"a", "a", "a", "a", "a", "a"};

initializer lists (值得重看)

int i;    // i有未定义的值
int j{};  // j 初始化成0
int* p;   // p有未定义的值
int* q{}; // q被初始化成nullptr

int x1(5.1);  // OK,但是x1会是5
int x2 = 5.3; // OK,但是x2会是5
int x3{5.3};  // ERROR,强制转换失败
int x4 = {5.3}; // ERROR,强制转换失败

class P {
  P(int a, int b) 
  {
    cout << a << b << endl;
  }
  P(initializer_list<int> il) 
  {
    for (auto &i :il) 
      cout << i << " ";
    cout << endl;
  }
}
P p(3, 5);	// 调用P(int a, int b)
P p{3, 5};// 调用P(initializer_list il),但是没有这个函数的时候就调用另一个构造函数了
P p{1, 3, 6};  // 调用P(initializer_list il)

int a = min{1, 3, 5};    // 原来的min版本只能求2个元素的最小值,现在可以求不限个数了

上一篇:删除二叉树的子树


下一篇:C++单链表的递归逆转(笔试一般用到)