给大家带来C++ 渐渐 Python 化
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln近几年C++有了良多变更。最新的两个版本C++11和C++14,引进了云云多的新特征,用BjarneStroustrup的话说就是“感到就像一个新言语一样。”
真的。古代c++构成了一个全新的编程作风,我不克不及不注重到它带有更多的Python滋味。基于局限(Range)的轮回、范例推导、向量、map初始化和lambda表达式。你越是探究古代C++,你越可以发明它内里的Python陈迹。
是Python间接影响了古代C++吗?仍是在C++传开前,Python已接纳了一些有效的布局?由你本人判别。
字面值
Python在2008年引进二进制字面值。如今C++14也有了。【更新:ThiagoMacieira在批评中指出,GCC实践上早在2007年就已撑持了。】
C++
staticconstintprimes=0b10100000100010100010100010101100;Python早在1998年引进了原始字符串字面值。在硬编码正则表达式或Windows路径时很便利。C++11也增加了一样的特征,只是语法上略有分歧:
C++
constchar*path=R"(c: hisstringhasackslashes)"; 基于局限的For轮回(Range-BasedForLoops)
在Python中,for轮回老是迭代遍历一个Python工具:
Python
forxinmyList:print(x) 与此同时,在近30年里。C++仅撑持C作风for轮回。最初,在C++11中,基于局限的for轮回被增加出来。
C++
for(intx:myList)std::cout<<x; 与Python迭代协定分歧,你能够迭代一个std::vector或任何完成了begin和end成员函数的类。有了基于局限的for轮回后,我常常发明本人但愿C++能内建像Python的xrange函数一样的函数。
主动化
Python一向以来都是一个静态范例言语。你不必要声明变量范例,由于范例是工具自己的属性。
Python
x="Helloworld!"print(x) 从另外一方面来讲,C++不是静态范例言语。是静态范例。不外在C++11中将auto关头字改作他用以用于范例推导,你可以写看起来很像静态范例的代码:
C++
autox="Helloworld!";std::cout<<x; 当你挪用重载几个范例的函数时,好比std::ostream::operator<<大概一个模板函数,C++更像一个静态范例言语。C++14进一步充分以撑持auto关头字,为auto增加了前往值撑持和lambda函数参数撑持。
元组
Python从一入手下手就很好的界说了元组范例。当你必要把几个值整合在一同的时分,元组就十分合适,如许就再不必要定名类来完成一样的功效了。
Python
triple=(5,6,7)print(triple) C++在C++11尺度库中增加了对元组的撑持。C++11的倡议书乃至还提到了这么做是受Python启示的:
C++
autotriple=std::make_tuple(5,6,7);std::cout<<std::get<0>(triple); Pyton同意你把一个元组剖析为多个自力的变量:
Python
x,y,z=triple 在C++里,你可使用std::tie完成一样的功效:
C++
std::tie(x,y,z)=triple; 一致的初始化
在Python里,列表是内置范例。因而,你能够只利用一个表达式来创立Python列表:
Python
constchar*path=R"(c: hisstringhasackslashes)";0 C++的向量(std::vector)与Python的列表最为类似。现在,C++11里新增的一致的初始化可让我们只利用一个表达式来创立向量和列表了:
C++
constchar*path=R"(c: hisstringhasackslashes)";1 在Python里,你还能够只利用一个表达式来创立一个字典:
Python
constchar*path=R"(c: hisstringhasackslashes)";2 与此相似,一致的初始化也合用于有序映照(std::map)和无序映照(unordered_map):
C++
constchar*path=R"(c: hisstringhasackslashes)";3 Lambda表达式
Python从1994年入手下手撑持lambda函数。
Python
constchar*path=R"(c: hisstringhasackslashes)";4 Lambda表达式是在C++11中被增加出来。
C++
constchar*path=R"(c: hisstringhasackslashes)";5 2001年,Python增加了静态嵌套感化域,可让lambda函数抓取界说在关闭函数内的变量。
Python
constchar*path=R"(c: hisstringhasackslashes)";6 一样,C++lambda表达式撑持一堆天真的抓取划定规矩,可让你做类似的事变:
C++
constchar*path=R"(c: hisstringhasackslashes)";7 尺度算法
Python内建filter函数可让你有选择的从一个列表中拷贝项(固然列表剖析是起首):
Python
constchar*path=R"(c: hisstringhasackslashes)";8 C++11中引进了std::copy_if,让你可使用一个相似的、相称功效的范例:
constchar*path=R"(c: hisstringhasackslashes)";9 C++
其他的C++算法仿照了Python的内建函数包含transform、any_of、all_of,min和max。行将到来的局限提案有潜力进一步简化这些表达式。
参数打包
Python从1988年就入手下手撑持恣意长度的参数列表.你能够界说一个函数承受恣意数目的实参,Python会将他们放到一个元组(tuple)中,你还能够将这个元组从头睁开为一个实参列表,并把他们传送进另外一个函数:
forxinmyList:print(x)0 C++11引进了对参数包(parameterpacks)的撑持.它相似于Python的恣意长度参数列表,而分歧于C作风的可变参数列表,这个参数包有本人的标识符来暗示全部实参序列。关头区分在于:在C++中,这个参数包不克不及在运转时做为一个独自的工具来操纵。你只能经由过程模板元编程手艺在编译时来利用他们。
forxinmyList:print(x)1 并不是一切的C++11和14中的特征都自创于Python。只是个中很年夜一部分特征看似云云。Python被以为是一种对利用者密切友爱的编程言语。跟着工夫的推移和这些特征渐渐被其他言语自创,它个中一些特质也渐渐昏暗上去。
你怎样看呢?C++中的这些新特征会不会使C++加倍复杂,亲和,更具体现力呢?
原文地点:http://preshing.com/20141202/cpp-has-become-more-pythonic/
当你经过一段时间的学习后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令。 在看别人程序时,不要连什么this指针呀,继承、派生、友员都搞不清楚,学了一个多月,小有点心得!总结如下: 去年年内看完了C++ Primer Plus,但是感觉那本书太啰嗦,字小纸大,看得好累~看完第15章,后面两章就没看了。 否极泰来。在你专注一个技术极度郁闷得时候不要放弃,可以暂时放弃,但是请马上回来,因为灵感在等你。黎明前确实是黑暗,但是到了黎明,下面就是很长一段得光明。 去年年内看完了C++ Primer Plus,但是感觉那本书太啰嗦,字小纸大,看得好累~看完第15章,后面两章就没看了。 大学C++老师开始上课就告诉我们了这个秘诀,而听取得人不多,所以最后很大一批转Java了。对于一个初学者来说,熟悉语法、锻炼手感和培养思维最好得办法就是code. 一开始你问得问题他一定可以解决,所以这个时候你如坐春风,一日千里;慢慢得你一定可以提出强人解决不了得问题(不管那方面技术),这个时候可以说你已经入门了,把强人解决不了任务解决掉,解决掉你自己一定很有成就感; C++有着很多对C语言修改的地方,这些修改犹如美国英语对英国英语的修改一样,使问题变得方便易懂!规范C++程序已经是刻不容缓的事情,既然C++取代C是趋势,就该加快这种步伐。 C++是门博大精深的编程语言,可以说它是其他很多语言的基础,我现在接触到的语言都是C的翻版或者衍生,所以学好它还是相当重要的。 其实这一部分,以后在写程序时会非常有用,自己对照书把TextQuery类实现一下。
页:
[1]