2010-12-30 14 views
6

g ++ 4.0.0.8とg ++ 4.3.2の違いは何ですか?これらの2つは、さまざまなプログラミングコンテストで使用されてきた最も一般的なC++コンパイラです。g ++バージョン4.0.0.8と4.3.2の違いは何ですか?

私はGoogleに試しましたが、何も見つかりませんでした。

+5

チェックアウト詳細 - > http://gcc.gnu.org/releases.html – DumbCoder

+1

@DumbCoderは巨大なリストです。私はちょうどそこに大きな違いがあるかどうかを知りたかったのです。 SPOJのようなオンラインプログラミングコンテストには、これらの2つのバージョンのC++があります。もし違いがなければ、SPOJは後者のバージョンしか持たないでしょう(SPOJが他のプログラミング言語コンパイラのために持っている最新のもの) –

答えて

13

2つの間のC++の変更に興味があることを考えると、それほど大きなリストではありません。 http://gcc.gnu.org/gcc-4.3/changes.html

あなたが見れば:http://gcc.gnu.org/gcc-4.0/changes.html

4.3.2のリリースノートここにある4.3のパッチリビジョンです:

4.0.0.8がリリースノート現在地4.0、のちょうどパッチリビジョンですそれらの違いについては、あなたが本当に気にしているGCC 4.0と4.3の間の最も重要な違いを以下のリストにまとめておきます。

GCC 4.3.2(GCC 4.1GCC 4.2からの変更を含む)があります。それはあったが(つまり、リンクだ)

もっとTR1ライブラリのサポート

  • <regex>(GCC 4.3)、<random>(GCC 4.2)、および<complex>(GCC 4.2)

C++の可視性の処理がオーバーホールされました。 (GCC4。2)

制限可視性はローカル静的に関数から、メンバーにクラスから伝播し、テンプレートとテンプレート引数からインスタンスへ、後者は明示的に宣言していない限り、視界されます。

クラスのvisibility属性は、閉じ括弧の後ではなく、クラスキーと名前の間に来なければなりません。

属性は、タイプを宣言するだけのenumsおよびelaborated-type-specifierに使用できるようになりました。

匿名名前空間のメンバは、言語セマンティクスの外部リンケージとして扱われますが、匿名名前空間のメンバは、他の宣言と共に使用されるようになりました。

文書化されていないテンプレート拡張がGCC 4.2で除去した(4.1で廃止されました)

少ないパラメータでテンプレートテンプレートパラメータにバインドするデフォルト引数でテンプレートを許可(文書化されていない)拡張は削除されました。たとえば:

template <template <typename> class C> 
void f(C<double>) {} 

template <typename T, typename U = int> 
struct S {}; 

template void f(S<double>); 

はもはやG ++で受け付けられません。このコードが受け入れられない理由は、Sが2つのパラメータを持つテンプレートであることです。したがって、1つのパラメータしか持たないCにバインドすることはできません。


さらに、いくつかの重要なものは次のように、あるporting to GCC 4.3 guide、チェック:

下位互換性/非推奨ヘッダが削除されましたが。

ほとんどこのプレ標準ヘッダーの束は、再び等、(必要に応じ<tr1/unordered_map>又は<tr1/unordered_set>を使用)<hashtable.h><tr1/unordered_map>を使用)<hash_map.h>、(標準<iostream>を使用)<iostream.h>ように、ない除去されたことを意味大したこと。例えば標準

厳密な施行、mainの2つの引数の形式の署名が正しくなければなりません。

重複機能のパラメータ名

void func(int x, int x); // now an error 

、様々なバグ修正だけでなく、変化があった私は本当にあなたが除去のような(競争のコードを書くと思いますどのように影響を与えるとは思いません/新しいコンパイラフラグの追加)、そして<?>?演算子(これまで使用されていた?)のようなものの削除

私は両方のコンパイラのコードを書く必要があった場合、2つの違いがあなたに大きな悲しみを引き起こすとは思わない。

0

g ++の2つの異なるバージョンの違いについては、 GNU C++コンパイラの2つの一般的なバージョンです。異なるLinuxリリースには、別のバージョンのg ++​​が同梱されている場合があります。私の現在のCentOS 5.5と同様に、g ++ 4.1.2もあります。

機能の詳細については、コメントのリンクを確認してください。

0

4.3.2が4.0.0.8より新しいため、より標準に準拠しています。詳細については、ドキュメントを確認して変更をリリースする必要があります。

関連する問題