work6
Ref:
http://zh.wikipedia.org/wiki/C++0x
http://wenku.it168.com/d_001049706.shtml
http://www.devx.com/SpecialReports/Article/38813
http://zh.wikipedia.org/wiki/CLR
http://zh.wikipedia.org/wiki/C%2B%2B
C++11标准中,大量充斥的左值右值的概念让我联想到与之相似的C++/CLI,同样是对原C++的扩充那么这两者之间又有着怎样相似怎样不同的联系呢?
首先是相同点:
C++/CLI为标准C++特性提供一流的包括全部CLI类的类型支持, 无论在任何地方明确说明是(标准C++的)扩展,保留现存标准C++程序的重要性。其本质上是C++的一个超集。另外,C++11根据Bjarne Stroustrup(C++的创始人并且是委员会的一员)表示,新的标准将几乎100%兼容于现有标准,也同样保证了C++11对原先C++的兼容性。
那么C++/CLI与C++11区别何在?
C++11是否具有价值,这牵扯到C++能不能用的问题,其扩充的C++语言特性,可以从必要性和可行性上进行分析。C++11的横空出世已经让其可行性不言自明,而其是否真的有必要呢。随着时代的发展,在不同的时期不同的语言因其自身的特性,不图案被大众所选择,或者被市场所抛弃。可以看到,C++的地位很大程度被其后来者python,java,C#取代,而其本来优秀的部分却因为很多自身瓶颈被人所忽视,因此改进C++是具有必要性的。
而C++的改进,说说我了解的一点那就是C++/CLI。
首先对于C++/CLI其应用的取向是很大程度上讲是基于WINDOWS的,其要解决的问题是如何用C++在.NET上进行高效的编程。C++/CLI的使用了许多JAVA中的特点,如垃圾回收之类,并为不具备某些C++特质的C#进行了良好的替代,对于CLR平台的支持使得C++的.NET开发如鱼得水。
而C++瞄准的不是对于一个特定平台的便捷性,而是针对C++原先语言上由于历史局限性而产生的不足进行补充,另外将一些其他语言也已支持并证明有效的现代编程思想融入其中,在语言层次上进行扩充,而不仅限于对于库和类的扩充,其中也有一些关于左右值引用的例子可以看到C++/CLI的影子,可以说C++11吸收了包括C++/CLI等一系列语言的优势特征,其语言本身就具有高效人性化的优越性。
这一点反应出C++11标准好用的特性。
以上所述,代表了我的想法,即C++11好用且原来的C++有改进的必要。
那么我来具体说明几个C++11中新鲜的例子:
Lambda
表达式:
sort( a, a+n, [](
int
& a,
int
& b)->
bool{return
a > b;} );
在需要使用谓词函数的时候可以很方便的进行调用。
可扩展的随机数功能:
可以让随机数服从某一分部,而不是完全的区间分布可以更好地贴近所需的数学模型。
正则表达式:
正则表达式的应用越来越广泛,对正则表达式的支持是对其非常好的补充。
多线程支持的更新:
更加贴合modern C++的理想。
但我对于c++11标准仍旧保留如下几个问题:
1. 这一点很泛化,正如我们现在碰到的,学校机器过于老旧不支持新的编译器以及IDE,某些科目限制我们使用新的标准,新的标准导致的教育与应用之间的隔阂需要什么方式来弥补?
2. C++11相比很多其他语言,没有非常鲜明的特点,让人感觉可替代性比较强,一直以来我觉得是否应该制作一个由c++向c编译的编译器,使得c++的用途更加广泛。
3. Lambda表达式的意义何在我没有看懂,为了一时方便而改变语言结构完全是宏定义的翻版,让人不能完全理解。
4. C++11很多新特性让用惯了旧特性的人很难迅速作出调整,是否应该出台一定规则将某些完全落后的设定以warning的形式报出。
5. 关于左值右值引用的设定,我认为很多语言做了更好的替代,是否应该从根本上重新规划一下这个问题呢?