分类: C/C++
2009-04-23 21:16:32
前些日 GCC 4.4 版发布,对 C++ 0x 标准的支持有了大幅的提升。今日到 GCC 网站看,得知 4.4.1 版本发布在即。
请注意,以下所有特性都需要在命令行指定 -std=gnu++0x
或 -std=c++0x
来启用!!
GCC 4.4 相对于 4.3 版最大的变化就是对 C++ 0x 标准支持有了大幅提升(当然,还有很多其他方面的改变,不过我个人比较关注 C++),已支持的 0x 特性中,thread 已经可用,api 方面基本上与 pthread 规范相一致,熟悉 pthread 的人能很快上手。因为 pthread 规范已经非常成熟,所以在 C++ 中支持 thread 只是标准方面的问题(看 4.4 的头文件可知,在支持 pthread 的平台上,mutex 和 condition_variable 等直接映射到 pthread 相应类型),不过,C++ 作用域之后变量被析构,使得程序员可以直接在临界区的作用域内声明 lock_guard
容器方面,forward_list 被加入,vector 等已有的容器增加了 cbegin,cend 来返回 const_iterator,并且最重要的,是对 Initializer lists--初始化列表的支持。以往对容器一些初始元素的置入,只能是声明容器后用 push_back 等方法调用,而现在,你可以这样用 vector
另一个好东西就是 auto,你可以不必写 map
对于构造函数,拷贝构造函数等的一些方便性的问题上,default 和 delete 已被支持。过去,自定义了构造函数后,默认的构造函数便不再自动生成,带来些语法上的麻烦,但是现在你可以这样写: constructor()=default:仍然有默认的构造函数。类不可复制:constructor(const xx&)=delete。诡异的“模板函数不能有默认模板参数”问题已解决。
以上这些只是我稍有了解的部分,相对 4.3 的全部变化,请看原页面 。比较可看出,4.4 相对 4.3 只增加了一些 tr1 的扩展来说,改变还是很大的。
为了第一时间尝鲜,我没有在 Linux 下编译 4.4,而是使用了别人编译的 GCC 4.4 win32 版,页面 ,我实验的这些特性中,win32 版的 GCC 是不能使用 thread 的,我加入了 pthread-for-win32,又定义了 GCC 头文件中几个控制 thread 库是否被支持的宏,仍然没有成功将 thread 带入 std 命名空间,最后一次成功带入,链接时却报错与 pthread-for-win32 中一个 time 结构冲突,故想完全体验 4.4 thread 好处的同志们请使用 Linux 版。另外,我个人声明,我使用 c/c++/java/c#(样样稀松),所以希望这个贴不要成为各个语言 fans 的 pk 场...喜欢 C++ 的同志看看,不喜欢的,也可以彼此借鉴借鉴。此次 0x 标准中借鉴了其他语言的长处,如契约概念(类似于 java 中 comparable,xxxable)lambda 表达式(C#已支持)而 java 的泛型,java7 的初始化列表等概念也从 c++ 中得到经验和教训(或许这些所说只是谁先有了实现的问题),语言的不断进步,我们也可得到更好的编程体验。
chinaunix网友2009-05-11 18:43:31
好久没有用过GCC了哈 ------------------------------------------------------------------ 拍鞋网阿迪达斯专卖,5月做活动,现在注册就送50元的现金抵用劵。 地址:http://www.paixie.net/adidas/