1、nullptr

void foo(char *);
void foo(int);
foo(NULL) //编译出错,不知道调用哪个,可能调用了foo(int)
foo(nullptr) //ok ,调用foo(char*)
//用nullptr替换原先的NULL

2、constexpr

#define LEN 10

int len_foo() {
return 5;
} int main() {
char arr_1[10];
char arr_2[LEN];
int len = 5;
char arr_3[len+5]; // 非法
const int len_2 = 10;
char arr_4[len_2+5]; // 合法
char arr_5[len_foo()+5]; // 非法 return 0;
} 改成:constexpr int len_foo() {
return 5;
}
constexpr int len = 5;

 3、auto 与 decltype用于类型推导

// 由于 cbegin() 将返回 vector<int>::const_iterator
// 所以 itr 也应该是 vector<int>::const_iterator 类型
for(auto itr = vec.cbegin(); itr != vec.cend(); ++itr); auto x = 1; auto y = 2; decltype(x+y) z;

4、基于范围的for循环

int array[] = {,,,,};
for(auto &x : array) {
std::cout << x << std::endl;
}

5、using的新用法,using可以替换typedef,可读性更好,也更灵活

template <typename T,typename U,int value>
class SuckType
{
public:
T a;
U b;
SuckType():a(value),b(value){}
}; template <typename U>
using NewType = SuckType<int, U, >; //typedef不支持模板推导
using Process = int(*)(void*); // 等效于 typedef int(*Process)(void*);

6、override,final关键字,override显示表明子类需要重载父类的方法,final说明这个类或者方法不允许重写

struct Base {
virtual void foo(int);
};
struct SubClass: Base {
virtual void foo(int) override; // 合法
virtual void foo(float) override; // 非法, 父类没有此虚函数
}; struct Base { virtual void foo() final; };
struct SubClass1 final: Base { }; // 合法
struct SubClass2 : SubClass1 { }; // 非法, SubClass 已 final
struct SubClass3: Base { void foo(); // 非法, foo 已 final };

7、委托构造函数与继承构造

//委托构造
class Base {
public:
int value1;
int value2;
Base(){
value1 = ;
}
Base(int value) :Base() {
value2 = value;
}
virtual void foo(int) {}; };
class Sub : public Base
{
public:
using Base::Base;//继承构造
};

8、enum增强

enum class new_enum :unsigned int {
value1,
value2,
value3=,
value4,
value5=
}; int main(int argc, const char *argv[])
{
if (new_enum::value3 == new_enum::value5)
{
cout << "equal" << endl;
}
if (static_cast<int>(new_enum::value1) == )
{
cout << "equal" << endl;
}
if (new_enum::value2 == ) //编译报错
{
cout << "equal" << endl;
}
if (new_enum::value4==static_cast<new_enum>())
{
cout << "equal" << endl;
} }

9、可变参数模板,初始化列表,这个有点复杂,建议再找相关文档学习

template<class T>
T sum(T & t)
{
return t;
}
template<class T,class ... Args>
T sum(T t, Args... rest)
{
return t + sum<T>(rest...);
} template<class T=int>
class FooVector
{
public:
using l = initializer_list<T>;
std::vector<T> m_ve;
FooVector(const l &list)
{
for (auto &x : list)
{
m_ve.push_back(x);
}
} void print()
{
for (auto &x : m_ve)
{
cout << x << endl;
}
}
}; int main(int argc, const char *argv[])
{
sum(1,2,3,6,7);
FooVector<> a{ ,,, };
a.print();
}

10、lambda表达式

[...] (...) ... {...}

[] 内是一个capture,可以在lambda内部访问的"nonstatic外部变量",如果没有要访问的变量,可以为空。static变量是可以直接被访问的。

() 内是参数,和函数参数一样。

... 是mutable, 异常明细, 属性说明符(noexcept等), 或者返回类型。如果其中之一出现,那么必须出现()。

{} 内是函数体,在这里面写明lambda要完成的工作。

[](){cout << "hello world"; }();

//[] 空捕获列表
//[name1, name2, ...] 捕获一系列变量
//[&] 引用捕获, 让编译器自行推导捕获列表
//[=] 值捕获, 让编译器执行推导应用列表 int x=,y=;
auto f = [&](int a) -> int { cout << "hello, world " << a <<x<<y++<< endl; return a; };
cout<<y;

11、std::function与std::bind

int foo(int a, int b, int c) {
;
}
int main() {
// 将参数1,2绑定到函数 foo 上,但是使用 std::placeholders::_1 来对第一个参数进行占位
std::function<int(int,int,int)> f = foo;
f(1,2,3);
auto bindFoo = std::bind(foo, std::placeholders::_1, ,);
// 这时调用 bindFoo 时,只需要提供第一个参数即可
bindFoo();
}

C++11以上的新特性整理的更多相关文章

  1. Swift 3到5.1新特性整理

    本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...

  2. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  3. Mysql8.0.11简介,新特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

  4. php7 新特性整理

    PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来越好. 在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP ...

  5. jdk 9 10 11 12 13 新特性

    jdk 9 新特性 1.集合加强 jdk9 为所有集合(List/Set/Map)都增加了 of 和 copyOf 方法,用来创建不可变集合,即一旦创建就无法再执行添加.删除.替换.排序等操作,否则将 ...

  6. Java JDK1.5、1.6、1.7新特性整理(转)

    原文链接:http://www.cnblogs.com/tony-yang-flutter/p/3503935.html 一.Java JDK1.5的新特性 1.泛型: List<String& ...

  7. kafka 幂等生产者及事务(kafka0.11之后版本新特性)

    1. 幂等性设计1.1 引入目的生产者重复生产消息.生产者进行retry会产生重试时,会重复产生消息.有了幂等性之后,在进行retry重试时,只会生成一个消息. 1.2 幂等性实现1.2.1 PID ...

  8. Java JDK1.5、1.6、1.7新特性整理

    转载请注明出处:http://www.cnblogs.com/tony-yang-flutter 一.Java JDK1.5的新特性 1.泛型: List<String> strs = n ...

  9. RAC 11.2的新特性

    网格即插即用(GPnP) 网格即插即用帮助管理员来维护集群,以前增加或删除节点需要的一些手动操作的步骤现在可以由GPnP来自动实现. GPnP不是一个单独的概念,它依赖于以下特性:在一个XML配置文件 ...

随机推荐

  1. 魔道祖师 (作者:墨香铜臭)mobi格式下载

    下载地址:[点我]电视剧陈情令原著主要讲的是五大仙门世家的故事,其中主要讲述的就是魏无羡与蓝忘机之间的故事. 前世的魏无羡万人唾骂,声名狼藉. 被情同手足的师弟带人端了老巢, 纵横一世,死无全尸. 曾 ...

  2. Centos7 防护墙 设置端口

    Centos7中的防火墙调整为firewalld,试一下systemctl stop firewalld关闭防火墙. 命令:systemctl stop firewalld 命令:systemctl ...

  3. RDBMS与数据库之间的关系

    什么是数据库? 数据库就是用来存放数据的仓库,它是一种特殊的文件. 什么是关系型数据库? 关系型数据库就是指建立在关系模型基础上的数据库,通常由多张表组成,这些表之间存在一定的关系. 什么是RDBMS ...

  4. android_activity_研究(一)

    android中活动的概念(activity)是一个很重要的东东.这里有很多东东值得好好研究.最好的研究来源当然是官网啦,所以本人这里写一点对官网文章的研究心得. 一.活动(activity)的概念 ...

  5. ServiceFabric极简文档-1.3删除群集

    删除群集 若要删除群集,请运行包文件夹中的 RemoveServiceFabricCluster.ps1 Powershell 脚本,并传入 JSON 配置文件的路径. 可以选择性地指定删除日志的位置 ...

  6. 【bfs】密码锁-C++

    Description 现在一个紧急的任务是打开一个密码锁.密码由四位数字组成,每个数字从 1 到 9 进行编号.每次可以对任何数字加 1 或减 1.当将9加 1 时,数字将变为1,当1减 1 的时, ...

  7. ==和equals的区别,85%的求职者“理直气壮”地回答错误

    应该会有不少初学的小伙伴上来就说:==比较的是地址值,equals比较的是值.这样回答对吗? 下面详细说下两者的区别. ==运算符 对于基本数据类型来说,比较的是数值 对于引用数据类型来说,比较的是地 ...

  8. 性能测试-loadrunner参数化

    工具:loadrunner11 ie8 场景:不同用户的登录 1.参数化功能: 让脚本使用批量的变化的数据测试,实现模拟不同数据/用户的行为 函数格式:返回值类型 函数名称(参数类型 参数,参数类型 ...

  9. 【转】8年!我在OpenStack路上走过的坑。。。

    8年!我在OpenStack路上走过的坑... 摘要: 2010年10月,OpenStack发布了第一个版本:上个月,发布了它的第18个版本Rocky.几年前气氛火爆,如今却冷冷清清.Rocky版本宣 ...

  10. 带新手玩转MVC——不讲道理就是干(下)

    带新手玩转MVC——不讲道理就是干(下) 前言:废话不多说,直接开干 完整案例演示 案例代码 LoginServlet package servlet; import domain.User; imp ...