homework-06-C++11
http://blog.csdn.net/lancelet/article/details/7220558
http://www.csdn.net/article/2012-05-15/2805585
http://wenku.it168.com/d_001049706.shtml
http://mindhacks.cn/2012/08/27/modern-cpp-practices/
http://www.cnblogs.com/zhuyp1015/category/370450.html
新特性
c++11一方面对c++的语言特性进行了拓展,一方面又对它容易令人混淆和纠结不清的地方做了规定。我阅读了一些奇奇怪怪的博客,打算就谈以下几点我比较感兴趣且作为一个没有任何c++编程基础的人能理解的新特性:
1、Lambda函数与表示式
C++中,标准程序库算法函数是很有效的东西,而诸如 sort 和 find,用户经常希望能够在算法函数调用的附近定义一个临时的述部函数。由于语言本身允许在函数内部定义类型,可以考虑使用函数对象,然而这通常既麻烦又冗赘。
C++11 对 lambda 的支持可以解决上述问题。
一个 lambda 函数可以用如下的方式定义:
[](int x, int y) { return x + y; }
表示接受0个外部变量,2个参数,返回两个参数x和y的和。
2、初始化列表
C++允许多种初始化方式,比如说 String s="shabi" 或者String s=new String("shabi")。C++11约定了使用{}来进行标准化的初始化。
比如:SequenceClass someVar = {1, 4, 5, 6};
vector<string> v = { "xyzzy", "plugh", "abracadabra" };
3、类型推导
有被明确初始化的变量可以使用 auto 关键字。这会依据该初始化子(initializer)的具体类型产生变量:
auto someStrangeCallableType = boost::bind(&SomeFunction, _2, _1, someObject);
auto otherVariable = 5;
someStrangeCallableType 的类型就是模板函数 boost::bind
对特定引数所回返的类型。作为编译器语义分析责任的一部份,这个类型能够简单地被编译器决定,但用户要通过查看来判断类型就不是那么容易的一件事了。
4、以范围为基础的 for 循环
Boost C++ 定义了许多"范围 (range) "的概念。范围表现有如受控制的串行 (list),持有容器中的两点。有序容器是范围概念的超集 (superset),有序容器中的两个迭代器 (iterator) 也能定义一个范围。这些概念以及操作的算法,将被并入 C++11 标准程序库。不过 C++11 将会以语言层次的支持来提供范围概念的效用。
for 述句将允许简单的范围迭代:
int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
x *= 2;
}
上面 for 述句的第一部份定义被用来做范围迭代的变量,就像被声明在一般 for 循环的变量一样,其作用域仅只于循环的范围。而在":"之后的第二区块,代表将被迭代的范围。这样一来,就有了能够允许 C-style 数组被转换成范围概念的概念图。这可以是 std::vector,或是其他符合范围概念的对象。
疑问和分析
1、lambda没问题么?
lambda函数终于出现在c++了,应用在sort,find这类需要传入简短函数中感觉还算不错,不过lambda表达式早已经在很多语言上都提供支持了,使用lambda表达式对于增加语言的简洁性有着不错的效果。不过在c++这种遍地是指针的古老的命令式风格的语言中,引入这种函数式编程的东西没问题么。
2、c++的“一致化”语法风格到底是什么?
有人说,c++11“使得 C++ 成为更易于教学的语言(语法更加一致化和简单化)”,不是很能理解这里所说的一致化和简单化,c++11中加入的新语法特性显然是让语法更复杂化。而那些对c++语法的限制和规定也只是小修小补,大部分只是为了让老程序员意识到:”哦,以前我这么做很麻烦而且会产生歧义,现在它帮我限制了自己“。 这也只是对老手而言,对于我这种新手看来还是感觉很复杂,语法繁多。
3、c++的优势是什么?c++11对c++带来了什么好处?
在我的理解中,c++的优势在于其具有很强的标准库(STL),比较好的元编程支持(容器),和从c语言继承过来的高效率。但它对面向对象的支持没有java做得彻底和规范,效率没有c高,元编程没有Lisp,Ruby强,语法规则也没有Python,Lisp简洁。 所以C++新特性并没有对c++的定位带来多少改观,经验丰富的c++程序会觉得它对自己带来了很好的便利性,而对于使用其他语言编程的程序员来说吸引力不大。
4、c++吸收了lambda表达式为何不再做得彻底点?
在摩尔定律达即将达到极限,并行计算受到关注的现在,我觉得函数式语言特性会是以后编程语言发展的主要趋势。可以看到比较新的语言比如python,ruby都大量支持函数式编程风格,更别说打着函数式语言名头的scala,haskell,lisp家族的clojure,racket。函数式编程是基于lambda calculus公理设计的,是一套和图灵机等价的计算模型(出现的比图灵机早,八卦一下,它的发明者是图灵的导师丘奇)。它的一个很大的特点是:函数是一种基本类型。这种对于”计算能力“的抽象使得其可以把每一个函数分发给不同的cpu,来实现很方便的并行编程。lambda 表达式的威力在c++中似乎只剩下了”传递一个临时函数指针“,所以我觉得只能说c++是为了赶时髦而吸收了lambda表达式,把它加入到古老的c++语法里的目的仅仅是为了方便而已,而其背后强大的并行计算潜力被忽视了。
5、不会c++/c#的人是不是就不适合去微软工作了?
由于种种原因,我基本没学过c++和c#。据我推测,微软的员工很有可能被要求使用windows系统,使用windows+vs作为开发环境,使用c# .net开发图形界面,使用c++开发底层程序。由于种种不为人知的原因,我习惯使用linux系统,用linux下各种open的工具来开发程序。从对环境的认同感和适应性来说,这种人是不是不大适合去微软工作?
总结
总而言之,由于自身”基本没用过c++“,所以很多新特性看得都云里雾里,难以深入理解。由于知识面的限制,很有可能我对c++11的理解是”完全错误的“,所以如有说错请多包涵。
homework-06-C++11的更多相关文章
- 深入理解ThreadLocal(转)(2015年06月11日)
注明:转自:http://my.oschina.net/clopopo/blog/149368 学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么.所以我们先来看看ThreadLocal对我 ...
- Mybatis源码解析(一)(2015年06月11日)
一.简介 先看看Mybatis的源码结构图,Mybatis3.2.7版本包含的包共计19个,其他版本可能会少. 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为 ...
- homework -06 围棋
playPrev功能的实现 public void playPrev(ref GoMove gm) { Point p = gm.Point; m_colorToPlay = gm.Color; cl ...
- homework 08_2 C++11新特性作业之二
---恢复内容开始--- 1.使用Lambda表达式计算“hello world!”中字母e和i的数量 下面是代码: #include "stdafx.h" #include< ...
- [Laravel] 06 - Project: from Usercase to View
故事背景 一.项目预览 From: https://www.imooc.com/video/12518 二.知识点 通过项目复习之前的重难点,在此列出并解决. /* implement */ 项目开始 ...
- Redis-4.0.11集群配置
版本:redis-3.0.5 redis-3.2.0 redis-3.2.9 redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial. 集群 ...
- CentOS8安装fastdfs6.06
目录 一.准备环境 二.解压并编译安装 1.解压下载好的包 2.编译安装 2.1.编译安装 libfastcommon 2.2.编译安装 fastdfs 2.3.安装 nginx 和 fastdfs- ...
- Final阶段第1周/共1周 Scrum立会报告+燃尽图 03
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2482] 版本控制:https://git.coding.net/liuyy08 ...
- 福大软工1816 · 评分结果 · Alpha冲刺答辩总结
作业地址:https://edu.cnblogs.com/campus/fzu/Grade2016SE/homework/2462 作业提交准则 按时交 - 有分 晚交 - 0分 迟交一周以上 - 倒 ...
- Oracle 11203 + ASM安装 for HP UX
一,安装前准备 1.创建所需组和用户 /usr/sbin/groupadd -g 1000 oinstall/usr/sbin/groupadd -g 1020 asmadmin/usr/sbin/g ...
随机推荐
- Android viewPage notifyDataSetChanged无刷新
转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...
- Mvc Kissy uploader实现图片批量上传 附带瀑布流的照片墙
前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...
- linux常用头文件
http://blog.csdn.net/kokodudu/article/details/17361161 aio.h 异步I/Oassert.h 验证程序断言 complex 复数类complex ...
- 内存分配方法 kmalloc()、vmalloc()、__get_free_pages()
Copyright: 该文章版权由潘云登所有.可在非商业目的下任意传播和复制. 对于商业目的下对本文的任何行为需经作者同意. kmalloc #include <linux/slab.h> ...
- [HDOJ1811]Rank of Tetris(并查集、拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1811 求一堆数据的拓扑序. 处理:x>y就是x到y一条边,x<y就是y到x一条边.关键问题 ...
- 函数ut_2_log
计算某个数的对数(最大的) 例如 16 计算后为 4 2的4次方为16 例如15 计算后为3 2的3次方为8 /******************************************** ...
- Qt之QTableView添加复选框(QAbstractItemDelegate)
简述 上节分享了使用自定义模型QAbstractTableModel来实现复选框.下面我们来介绍另外一种方式: 自定义委托-QAbstractItemDelegate. 简述 效果 QAbstract ...
- Java与正则表达式
Java与正则表达式 标签: Java基础 正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则 正则语法 普通字符 字母, 数字, 汉字, ...
- [转]Jquery Ajax用法
原文地址:http://www.php100.com/html/program/jquery/2013/0905/6004.html jQuery学习之jQuery Ajax用法详解 来源: 时间 ...
- js学习总结
转自 http://blog.sina.com.cn/s/blog_75cf5f3201011csu.html 一: 关于基本数据类型在栈内存和堆内存中的关系 基本数据对于栈内存和堆内存是可以复制的, ...