|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
文件处理命令: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 与此同时,在近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 从另外一方面来讲,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[0])
复制代码 C++在C++11尺度库中增加了对元组的撑持。C++11的倡议书乃至还提到了这么做是受Python启示的:
C++
- autotriple=std::make_tuple(5,6,7);std::cout<<std::get<0>(triple);
复制代码 Pyton同意你把一个元组剖析为多个自力的变量:
Python 在C++里,你可使用std::tie完成一样的功效:
C++
一致的初始化
在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)中,你还能够将这个元组从头睁开为一个实参列表,并把他们传送进另外一个函数: C++11引进了对参数包(parameterpacks)的撑持.它相似于Python的恣意长度参数列表,而分歧于C作风的可变参数列表,这个参数包有本人的标识符来暗示全部实参序列。关头区分在于:在C++中,这个参数包不克不及在运转时做为一个独自的工具来操纵。你只能经由过程模板元编程手艺在编译时来利用他们。 并不是一切的C++11和14中的特征都自创于Python。只是个中很年夜一部分特征看似云云。Python被以为是一种对利用者密切友爱的编程言语。跟着工夫的推移和这些特征渐渐被其他言语自创,它个中一些特质也渐渐昏暗上去。
你怎样看呢?C++中的这些新特征会不会使C++加倍复杂,亲和,更具体现力呢?
原文地点:http://preshing.com/20141202/cpp-has-become-more-pythonic/
当你经过一段时间的学习后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令。 |
|