GCC4.7 和C++11
GNU 项目今天发布了GCC 4.7 正式版本。
GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 使用 GPL 与 LGPL 许可证,是 GNU 计划的关键部分。GCC 目前可处理 C++、Fortran、Pascal、Objective-C、Java以及 Ada 等语言。现在是 Linux/Unix、Mac 等操作系统的标准编译器。
该版本在4.6.x的基础上,进行了大量的改进,现在C、C++和Fortran编译器支持3.1版本的OpenMP规范(用于共享内存并行系统的多线程程序设计的一套指导性注释)。该版本还针对各个语言进行了功能改进,主要包括:
针对C的功能改进
- 支持ISO C11标准中的更多特性。除了之前的-std=c1x和-std=gnu1x选项外,GCC现在还支持-std=c11和-std=gnu11选项。
针对C++的功能改进
- G++现在支持-std=c++11、-std=gnu++11和-Wc++11-compat选项,这些选项的作用相同。
- 实现了C++11的extended friend语法。
- 实现了C++11的重写控制。
- 实现了C++11的非静态数据成员初始化。
- 实现了C++11的用户定义数据标识。
- 实现了C++11的别名声明。
- 实现了C++11的委托构造函数。
针对运行时库(libstdc++)的改进
- 实验性地支持新的ISO C++11标准。
- 增加了--enable-clocale=newlib配置选项。
- 用于无序关联容器的调试模式迭代器。
- 通过包含<unistd.h>来避免破坏全局命名空间。
针对Go语言的改进
- 现在GCC实现了Go1语言标准,目前对于Go的支持尚不完全,预计将在4.7.1版本中进行改善。
- Go已经在GNU/Linux和Solaris平台上进行了测试,在其他平台中也可能会很好地运行。
关于改进的详细信息可参阅:GCC 4.7 Changes
使用GCC 4.7的一些注意事项:
- 一些针对旧系统的支持功能以及最近没有被维护或检验的GCC目标端已经被放弃,在下个版本中将会永久删除这些代码。
- AVR端的libgcc已得到改善,它的multilib架构得到了增强。因此,所有应用程序的对象必须在GCC 4.6.x或4.7.0中进行编译。
从之前GCC版本迁移至4.7版,可参阅:迁移指南
GCC 4.7下载:http://gcc.gnu.org/mirrors.html
MinGW也更新到了4.7.0了,下载是这里:http://sourceforge.net/projects/mingw/?source=directory