g++ 4.0.0.8和g++ 4.3.2有什么区别?这两个编译器是我在各种编程比赛中看到使用最广泛的C++编译器。
我尝试过在谷歌上搜索,但没有找到相关信息。
g++ 4.0.0.8和g++ 4.3.2有什么区别?这两个编译器是我在各种编程比赛中看到使用最广泛的C++编译器。
我尝试过在谷歌上搜索,但没有找到相关信息。
考虑到你对C++在两个版本之间的变化感兴趣,这并不是一个"很长的列表"。
4.0.0.8只是4.0的补丁修订版,其发布说明在这里: http://gcc.gnu.org/gcc-4.0/changes.html。
4.3.2是4.3的补丁修订版,其发布说明在这里: http://gcc.gnu.org/gcc-4.3/changes.html。
如果你看一下它们之间的差异,我认为下面的列表涵盖了你真正关心的GCC 4.0和4.3之间最重要的差异。
GCC 4.3.2具有(包括来自GCC 4.1和GCC 4.2的更改):
实验性支持ISO C++0x标准(这是一个链接)
long long
现在在C++中已经正式支持(尽管在旧版GCC中它是一个提供的扩展)extern
std::vector<std::vector<int>>
现在受支持(请注意声明末尾两个>
之间没有空格)。更多TR1库支持
<regex>
(gcc 4.3),<random>
(gcc 4.2)和<complex>
(gcc 4.2)C++可见性处理已进行全面改进。(GCC 4.2)
限制能见度会从类传递到成员,从函数传递到局部静态变量,从模板和模板参数传递到实例化,除非后者已经明确声明了可见性。template <template <typename> class C>
void f(C<double>) {}
template <typename T, typename U = int>
struct S {};
template void f(S<double>);
<iostream.h>
(使用标准的<iostream>
)、<hash_map.h>
(使用<tr1/unordered_map>
)<hashtable.h>
(根据需要使用<tr1/unordered_map>
或<tr1/unordered_set>
),等等。不是很大的问题。main
的两个参数形式的签名必须正确。void func(int x, int x); // now an error
还进行了各种错误修复,以及我认为不会影响您编写竞赛代码的更改(例如移除/添加新的编译器标志),以及删除像<?
和>?
运算符之类的东西(你曾经使用过这些吗?)。
总的来说,如果您必须为两个编译器编写代码,我不认为它们之间的差异会给您带来太多烦恼。
由于4.3.2比4.0.0.8更新更加符合标准。有关详细信息,您必须查看文档和发布更改
如果你想了解更多功能细节,请查看你评论中的链接。