首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>资讯动态>新版发布>正文

GCC 4.4.1 发布在即,C 0x 标准实验性支持大幅进步

http://www.oklinux.cn  2009-05-06  toy   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn
{撰文/guest}

前些日 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<mutex>lock(mutex),而无需手动释放互斥锁。得益于 4.4 版中对于其他 C 新特性--变长模板参数的支持,也可以一次性在 std::lock(LockableType1&m1,LockableType2&m2...)中锁定多个锁。对于 thread 编程中相关的时间问题,如 pthread 中的 pthread_cond_wait,由另一个 0x 标准的库--chrono 支持,这个库抽象了时间点,时间间隔等概念,而且借助运算符重载,对时间点-时间点=时间段,时间点+时间段=时间点 等常用逻辑进行了封装。另外使用了模板技术在编译期对声明的类型精度进行保护,比如说 1hour 1second,只能得到更高精度的 second 类型,而不能得到 hour 类型。与 pthread 相关的还有 cstdatomic,其中包含了常用的基本类型对应的 atomic 类型,而且使用 atomic 也可以生成自定义的 atomic 类型。

容器方面,forward_list 被加入,vector 等已有的容器增加了 cbegin,cend 来返回 const_iterator,并且最重要的,是对 Initializer lists--初始化列表的支持。以往对容器一些初始元素的置入,只能是声明容器后用 push_back 等方法调用,而现在,你可以这样用 vector<int> container{1,2,3,4,5,6,7}。而且初始化列表可以嵌套,比如: set<boost::tuple<int,double>> tuple_container{{2,3.2},{4,5.8}};(测试发现一个问题,如知道请赐教。经测试, GCC 自带的 std::tr1::tuple 支持初始化列表,但是不能嵌套,boost::tuple 可以)。这方便了使用,也提高了可读性。

另一个好东西就是 auto,你可以不必写 map<string,pair<int,vector>>::const_iterator it=container.begin()(当然只是举例子...),而直接用 auto it=container.begin(),类型推导就交给编译器吧。另一个小的但是方便的变化是你可以这样写 vector<pair<int,double>> 而不用写 vector<pair<int,double>空格>。

对于构造函数,拷贝构造函数等的一些方便性的问题上,default 和 delete 已被支持。过去,自定义了构造函数后,默认的构造函数便不再自动生成,带来些语法上的麻烦,但是现在你可以这样写: constructor()=default:仍然有默认的构造函数。类不可复制:constructor(const xx&)=delete。诡异的“模板函数不能有默认模板参数”问题已解决。

以上这些只是我稍有了解的部分,相对 4.3 的全部变化,请看原页面 http://gcc.gnu.org/projects/cxx0x.html。比较可看出,4.4 相对 4.3 只增加了一些 tr1 的扩展来说,改变还是很大的。

为了第一时间尝鲜,我没有在 Linux 下编译 4.4,而是使用了别人编译的 GCC 4.4 win32 版,页面 http://cboard.cprogramming.com/tech-board/114279-gcc-4-4-0-released.html,我实验的这些特性中,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 中得到经验和教训(或许这些所说只是谁先有了实现的问题),语言的不断进步,我们也可得到更好的编程体验。


上一篇:FreeBSD 7.2 发布   下一篇:惠普推廉价ProBook商务笔记本预装Linux

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·FreeBSD 7.2 发布
·Ubuntu 中文社区宣传视频及口号有奖征集
·Mandriva Linux 2009 Spring 发布
·Fedora 11 Preview 发布
·10 个具有特殊用途的 Linux 发行版
·Ubuntu 9.04 发布
·Debian 5.0.1 发布
·Ubuntu Tweak 0.4.7.1发布
·OpenOffice.org 3.1 发布
·Flashrom 0.9.0 发布
·BSD发行版发布:FreeBSD 7.2
·BSD发行版发布:DragonFly BSD 2.2.1
·BSD发行版发布:OpenBSD 4.5
·BSD发行版发布:NetBSD 5.0
·开发者发行版:Fedora 11 Preview
·VirtualBox 2.2.2 发布
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Ubuntu Tweak 0.5.0正式发布!
·Fcitx 3.6.2 发布
·KDE 4.3.2 发布
·PCMan File Manager 将要重写
·X.org Server 1.7.0 发布
·X.Org Server 1.6.4 发布
·搜狐开源镜像上线
·GNOME 2.28 发布
·Ubuntu 9.10 在 SSD 上完成启动仅用 5
·Lucid Lynx: Ubuntu 10.04 的开发代号
·GIMP 2.8 将加入单窗口模式
·KDE 增添快速平铺窗口功能
  阅读排行
·Fedora 9官方正式发布(官方下载地址)
·Compiz Fusion 0.7.2已发布可下载
·Fedora 9 官方下载地址
·Qt 4.5 和 Qt Creator 1.0 发布
·Ubuntu 8.10正式版及衍生版下载地址
·VMware Workstation 6.5 Beta 引入 Uni
·Intel发布最新Linux显卡驱动2.2.99.901
·最中文化的Linux 红旗Linux桌面版7.0 r
·Fedora 9 bt 种子下载地址(官方提供)
·Ubuntu 8.04 (Hardy Heron) LTS下载地
·发行版发布:KNOPPIX 5.3.1
·Red Hat Enterprise Linux 5.2发布
·显卡测试软件SPECViewPerf 10 for Linu
·Ubuntu优化大师:Ubuntu Tweak 0.2.4发
·发行版发布:Scientific Linux 5.3
网摘收藏: