C++是一门与时俱进的语言。 早期的C++关注的主要问题是通用性,却没有太多关注易用性的问题,使得C++成为了一门多范式语言,但是使用门槛较高。

  从2011开始,C++的标准进行了较大的更新,开始更多地关注易用性。通常,2011年的C++标准称为C++11,又称为C++0X。目前,C++的标准基本上每三年更新一次,因此有了2014的C++14,以及今年即将发布C++17标准。如果继续是三年发布一个标准,可以预期,在2020会有C++20标准。目前GCC 6.1开始已经默认默认使用 C++14 标准。

  现代C++的详细内容请参考维基百科或者http://en.cppreference.com或者MSDN的介绍:欢迎回到 C++(现代 C++)

  本篇将举一个简单的例子,通过四个特性,说明现代C++的魅力。如下:

 #include <iostream>
#include <vector>
#include <utility> using namespace std;
int main()
{
//1.`Range For` And `Auto` (since C++11)
char str[] = "hello";
for (auto ch : str)cout << ch;
cout << endl; //2.`using` for `type alias` (since C++11)
using vecint = vector<int>;
vecint ivec;
for (auto ele : { ,, })ivec.push_back(ele);
for (auto ele : ivec)cout << ele << endl; //3.Generalized lambda (since C++14)
auto f = [](auto x, auto y) {return x + y; };
auto g = [](auto func, auto z) {return func(, z) + ; };
auto apply = [](auto func, auto ele) {return func(ele); };
auto square = [](auto ele) {return ele*ele; };
cout << f(, ) << endl;
cout << g(f, ) << endl;
auto s = f(string("hello"), string(" world"));
//cout << s << endl;
cout << s.c_str() << endl; //MSVC error for `s`
cout << apply(square, 8.1) << endl; //4.Structured binding declaration (since C++17)
auto a = "hello";
auto b = "world";
auto swap = [](auto x, auto y) {return make_pair(y, x); };
auto [c, d] = swap(a, b);
cout << c << endl << d << endl;
}

  编译: $ g++ -std=c++ main.cpp

  输出:

$ ./a
hello hello world
65.61

涉及的四个特性

  1.Range-based for loop (since C++11)

  基于范围的for循环在很多语言早就有了,比如Python,Java1.5+。这是一个易用特性。

  2.'using'关键字用于别名 (since C++11)

  using增加了新用法,算是老词新意,用于简化过长的类型声明,目前Java依然没有这个特性。

  3.Generalized lambda (since C++14)

  泛型Lambda,有一点类似C++中模版,在这里比模版简洁。

  4.Structured binding (since C++17)

  结构化绑定声明,是指在一次声明中同时引入多个变量,同时绑定初始化表达式的各个子对象的语法形式。

小结:

  这个例子给我的感觉是,如果连auto都可以省略掉的话,这语法基本上就类似Python了。这也说明,C++开始吸收其他语言的优点,成为一门越来越现代化的语言。目前,越来越多的新项目开始使用C++的新特性。为了避免落后,我们有必要重新认识C++。

C++学习(一):现代C++尝试的更多相关文章

  1. 学习DDD的初步尝试,从最基础的开始,业务介绍,划分限界上下文 ,建立模型

    Conference业务简介 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的用户有两类: 1:客户,可以创建和管理会议. 2:会议座位预定者,可以预订会 ...

  2. WMS学习笔记:1.尝试加载WMS

    1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...

  3. Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

    摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...

  4. Spring Security笔记:登录尝试次数限制

    今天在前面一节的基础之上,再增加一点新内容,默认情况下Spring Security不会对登录错误的尝试次数做限制,也就是说允许暴力尝试,这显然不够安全,下面的内容将带着大家一起学习如何限制登录尝试次 ...

  5. 20145212 《Java程序设计》第5周学习总结

    20145212 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.Java中所有错误都会被打包为对象,通过try和catch语法可以对代表错误的对象做处理. try{ . ...

  6. paper 53 :深度学习(转载)

    转载来源:http://blog.csdn.net/fengbingchun/article/details/50087005 这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算 ...

  7. wpf依赖属性、绑定实现原理、附加属性学习

    依赖属性和普通属性相比节省内存的原因:对于普通属性,每个对象有需要存储一个普通属性的值,即便是默认值.而依赖属性的默认值是静态的存储在类中的,所有对象都使用同一默认值,所以对于拥有大量属性的控件来说这 ...

  8. 新手学习 Vim 的五个技巧

    多年来,我一直想学 Vim.如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具.我说的学习,指的是真正意义上的学习.想要精通确实很难,所以我只想要达到熟练的水平 ...

  9. SharePoint 学习记事(一)

    记录背景: 随着公司业务的拓展,为拿到更多的项目,让原本不太信任我们的美国大佬相信我们的实力,让在美国的销售发挥他的能力,所以公司在13年下半年筹划收购了一家美国本土的公司.大约400人的规模,这个公 ...

  10. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

随机推荐

  1. 22.VUE学习之-replice删除当前评论条数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Kilani and the Game CodeForces - 1105D (bfs)

    Kilani is playing a game with his friends. This game can be represented as a grid of size n×mn×m, wh ...

  3. 批量导出ppt中内嵌的图片

    某个ppt中很多页,然后插入了很多图片,且图片都是被压缩的,看起来非常费劲,所以想着一次性把图片另存为,找了接近一个小时,终于被我找到啦,分享给大家: 1.直接把ppt的后缀修改为rar 2.解压ra ...

  4. vue时时监听input输入框中 输入内容 写法

    Vue input 监听 使用 v-on:input="change" 实现即可 App.vue <template> <div> <md-field ...

  5. ajax跨域请求的处理

    跨域的情形有很多种,网上有人给出了一份表格, 表格中标识为”不允许”通信的情况都属于跨域.实际网络服务中需要跨域的情况确实存在,于是开发者们提供了一种解决方案,就是使用jsonp格式进行数据交互,它不 ...

  6. django项目在uwsgi+nginx上部署遇到的坑

    本文来自网易云社区 作者:王超 问题背景 django框架提供了一个开发调试使用的WSGIServer, 使用这个服务器可以很方便的开发web应用.但是 正式环境下却不建议使用这个服务器, 其性能.安 ...

  7. leetcode 【 Majority Element 】python 实现

    题目: Given an array of size n, find the majority element. The majority element is the element that ap ...

  8. 9.Iptables与Firewalld防火墙

    第9章 Iptables与Firewalld防火墙 章节简述: 保障数据的安全性是继保障数据的可用性之后最为重要的一项工作.防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用 ...

  9. Chrome autocomplete="off"无效

    如果不希望输入框自动填充,可以设置 input 或 textarea 标签的属性 autocomplete="off". 但是有时 Chrome 会忽视 autocomplete ...

  10. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...