一个热爱 C++ 的程序员应该知道 C++0x 为何物吧。C++ 标准制定委员会曾在 1998 年和 2003 年制定和更新了 C++ 的标准,使 C++ 的编写更规范,功能也得到了提升。但是每次标准的制定后,委员会都会想着下一代的标准,C++ 的下一代就是 C++0x.
但是如今,C++0x 已然被拖成 C++1x. 这是很明显的,现在已经是 2010 了。最新的消息是,C++1x 会在 2010年末最终制定完成,但由于委员会还有一些问题要解决,该标准预计能在 2011 年成为正式标准,通俗地说就是成为 C++11, 说玄乎些也就是 ISO/IEC 14882:2011.
我想大家最感兴趣的是新标准里有些什么。由于这些标准大多数都是外国人定的,有关它的中文信息少之又少,国内对标准的制定也不是很有兴趣,网上见到的文章说的都是 200x 年的预测了,这些预测如今看来也没有多少应验的。目前我忙于准备高考,高考完后我想写一本有关新标准的书。
我认为,采用了新标准的 C++ 在运行效率上会类似 C, 在编写效率上将直逼 Java. 你可以和我争辩这个问题,我只想告诉你,C++ 的爹地说,争议最多的语言正是最流行的语言。我认为在提高编码效率时牺牲点运行效率是值得的。事实上,C++ 的机制也允许你不使用新特性,如果你是个保守的程序员,你可以把代码写得和 C 一样而完全兼容于新标准。再说,新特性也是一些很成熟、甚至已经成为某种标准的东西,比如 RegEx, 所以我非常支持新标准的出台。让我们对 C++11 充满期待吧。
C++ 的准标准库 Boost
Boost 是 C++ 的准标准库。此话怎讲呢?首先这是由 C++ 标准委员会开发维护的。然后,这一定程度上体现了 C++ 程序员的民意,很多来不及加入新标准的大家又期待的特性就被那些 geeks 加入了 Boost. 我们可以先睹为快: .
新特性之 RegEx
RegEx 就是正则表达式。传说 C++1x 会把正则表达式添加到标准库中。正则表达式是如今很多高级语言都支持的东西,比如 PHP, Java, C# 等,并且应用非常的广泛。
正则表达式是用来干嘛的呢?它是用来匹配、查找或替换字符串的。什么是匹配?匹配就是判断一个字符串是否符合某种要求。什么是查找?查找就是找到字符串中的某个符合要求的子串。什么是替换?替换就是将字符串中的某个子串替换成另外一个子串。你可能会说:“那 Word 的查找和替换是不是能够做到这一点呢?” Word 当然可以做到查找和替换,但是它只能查找固定的子串,只能替换成固定的子串:“可以帮我把猪换成狗吗?”然而正则表达式能够迅速满足你这样的要求:“可以帮我把中括号扩起来的内容当成电子邮件的用户名,然后把中括号去掉再加上 @liuyue.asia 吗?”
泛型编程的升级
传言说 C++ 拟在 C++1x 中升级泛型的支持。泛型是什么呢?其实泛型在 C++03 中称为模板,没错,就是 template<typename T> 之类的东西。
由于 C++ 标准号称向下兼容,向下兼容的意思是,以前是对的东西,现在还会是对的;但是以前是错的东西,现在可能支持了。所以,C++1x 会在这方面显得更加随便。
可变数据类型
说到这里,可能有些人已经激动不已了。我的编程是从 Visual Basic 起步的,当我得知这个特性时,我想:“难道 C++ 真的要变成 Visual Basic 了吗?是不是 C++ 与 Visual Basic 的区别,仅仅是 Option Explicit 了呢?”
当然 C++ 不可能变成 Visual Basic. 不过可变数据类型的确算是一个革命性的特性。肯定会有人认为,这会增大运行开销,但是请想一想,你完全可以使用 C++03 的代码,在 C++1x 的标准下,编译出与原来一样效率的程序。
集合内的 for 循环
鸡冻的同学们,请看代码。
int my_array[5] = {1, 2, 3, 4, 5}; for (int & x : my_array) { x *= 2; }
这就是集合内的 for 循环,不久将被 C++1x 支持。
只有想不到
其实 C++ 还有很多特性有待更新,这里只是列举出了传言中的一点点。国内关注标准的人真的不多,我希望国人能够多多关注这些,甚至参与到国际标准的制定中去。
最后说明一点,本文内容多为传言,不保证真实性。但是可以确定的是,C++1x 将在不久的将来发布,并且成为新的 C++ 标准。