C++11语言新特性

1:Template表达式内的空格

vector<list<int> >; Old model

vector<list<int>>; New in C++11

之所以有上述规定,是因为那个时候C++编译器会将上述泛型中的>>识别成为运算符,因此才做出了这么一个规定.

2 nullptr 用来替代NULL。

这是因为本质上NULL是一个宏,表示为0,因此在进行参数传递的时候回有二义性,虽然编译器最后还是做出了自己的选择。

而nullptr则不同,编译器回自动的将其转换成为对应类型的指针变量。代码如下:

#include <iostream>

using namespace std;

void f(int a)
{
    cout << a << endl;
    cout << "f(int a)" << endl;
}

void f(void * a)
{
    cout << "f(void * a)" << endl;
}


int main()
{
    f(NULL);
    f(nullptr);
    return 0;
}

测试结果显示

因此,在C++11中,最好用nullptr来替代NULL。

 3 使用auto来进行类型推导

4 一致性初始化,统一使用{}初始化列表来进行变量初始化。

5 Range-Based for循环

6 Move语义和Rvalue Reference

7 关键字 noexcept

8 关键字 constexpr

9 Labmda表达式

10 decltype关键字

11 尾置返回 一种新的返回值方式。

12 非类型模版参数  模版参数默认值  使用typename来强调是一种类型而不是其他。

先介绍这些吧

posted @ 2018-05-15 08:46  niudong  阅读(275)  评论(0)    收藏  举报