C++学习(一):现代C++尝试

  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++的魅力。如下:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main()
 5 {
 6     //1.‘Range For‘ And ‘Auto‘
 7     char str[] = "hello";
 8     for(auto ch:str)cout<<ch;
 9     cout<<endl;
10     //2.‘using‘
11     using vecint = vector<int>;
12     vecint ivec;
13     for(auto ele:{1,2,3})ivec.push_back(ele);
14     for(auto ele:ivec)cout<<ele<<endl;
15     //3.generalized lambda
16     auto f = [](auto x,auto y){return x+y;};
17     auto g = [](auto func,auto z){return func(3,z)+4;};
18     auto apply = [](auto func,auto ele){return func(ele);};
19     auto square = [](auto ele){return ele*ele;};
20     cout<<f(2,3)<<endl;
21     cout<<g(f,5)<<endl;
22     cout<<f(string("hello"),string(" world"))<<endl;
23     cout<<apply(square,8.1)<<endl;
24 }

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

  输出:

$ ./a
hello
1
2
3
5
12
hello world
65.61

  涉及的三个特性:

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

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

  2.‘using‘关键字用于别名

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

  3.Generalized lambda

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

  小结:

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

时间: 2024-11-11 09:19:38

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

201521123109《java程序设计》第四周学习总结

1. 本周学习总结 #1.1 尝试使用思维导图总结有关继承的知识点. #1.2 使用常规方法总结其他上课内容. - 了解了有关类的继承的知识 - 了解继承和多态的关系以及一些关键字内容 -  学习了Object-equals方法,Object-toString方法 2. 书面作业 #1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) `答:类注释 /**.......你要注释的内容/ ` #2.面向对象设计(大作业1,非常重要)##2.1 将

新手学习 Vim 的五个技巧

多年来,我一直想学 Vim.如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具.我说的学习,指的是真正意义上的学习.想要精通确实很难,所以我只想要达到熟练的水平.我使用了这么多年的 Linux ,我会的也仅仅只是打开一个文件,使用上下左右箭头按键来移动光标,切换到插入模式,更改一些文本,保存,然后退出. 但那只是 Vim 的最最基本的操作.我的技能水平只能让我在终端使用 Vim 修改文本,但是它并没有任何一个我想象中强大的文本处理功能.这样我完全无法用 V

今后的学习路径

写一个website时,发现自己的java基础知识并不是很牢固,确实,为了写出一个真正的项目,疯狂的学习各种知识,只求懂个大概,没有深入,现在发现问题啦,回头重新学习,从后端到前端仔仔细细的重学一遍. 今后的学习路径是:java基础,(java多线程,可能最后学),HTML&CSS, javascript, jsp,Servlet.然后,用这些知识写几个项目,综合一下,疏通前端与后端,数据库之间的关系. 学习java用的书是<Head First Java>,如有需要,可以留言. 今天

【Python学习】Python解决汉诺塔问题

参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! 信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉 学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了 汉诺塔的图解递归算法 一.起源: 汉诺

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

1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点 2. 书面作业 Q1代码阅读:Child压缩包内源代码 1.com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答:不能编译通过,句子 System.out.println(i)会出错.如要改正则将父类的private int i=1改成protected int i=1即可执行 输出结果如下: 1 2 2 1 1 2 1 2.另外一个包中的OutOfParentPa

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

摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有效的推理和学习产生相应尺寸的输出.我们定义并指定全卷积网络的空间,解释它们在空间范围内dense prediction任务(预测每个像素所属的类别)和获取与先验模型联系的应用.我们改编当前的分类网络(AlexNet [22] ,the VGG net [34] , and GoogLeNet [35] )到完

百度前端学院两个月学习量任务说明

任务说明 初级班 & 中级班 初级班和中级班的任务内容基本一致,但是在细节要求和时间要求上会不一样. 任务一:HTML.CSS基础 初级班:11天 中级班:4天 任务二:JavaScript基础 初级班:13天 中级班:7天 任务三:一个简单的to-do APP,巩固之前的学习,并深入学习JavaScript语言的一些特性.以及相关的一些设计模式 初级班:7天 中级班:7天 任务:关于移动.node.js.ES6.CSS Processing.JavaScript模块化.前端工程化,掌握目前前端

C++的开源跨平台日志库glog学习研究(二)--宏的使用

上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. 日志输出宏 这里我们以一条最简单的日至输出为例说明: LOG(WARNING) << "This is a warning message"; 这里LOG是一个宏,其定义如下(logging.h line 487): #define LOG(severity) COMPACT

201521123092《java程序设计》第五周学习总结

1.本周学习总结 #1.1 尝试使用思维导图总结有关多态与接口的知识点. 2.书面作业 #1.代码阅读:Child压缩包内源代码##1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答:不能编译通过.出错在 Syatem.out.println(i). 父类parent中定义i为private,所以子类child中不能用i. 把private改成protected即可,输出结果为:1 2 2 1 1 2 1 ##1.2 另外一个

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

初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像在给Qt做宣传,在主页上占了一栏的广告,只是,这时,我还没怎么刻意去留意这个陌生的字眼.在我大二上学期中下期时,即大概是2011年的12月,由于自己刚刚完成了汇编语言的入门学习,正要制订下一个学习目标,所以,又开始找起了资料,同时,也再次开始为自己的就业问题担心,于是,开始搜集一些招聘单位的信息,这时候,