2010-12-30 5 views
6

Was ist der Unterschied zwischen g ++ 4.0.0.8 und g ++ 4.3.2? Diese beiden sind die häufigsten C++ - Compiler, die ich in verschiedenen Programmierwettbewerben verwendet habe.Was sind die Unterschiede zwischen g ++ Version 4.0.0.8 und 4.3.2?

Ich habe versucht, es zu googeln, aber nichts gefunden.

+5

Checkout im Detail -> http://gcc.gnu.org/releases.html – DumbCoder

+1

@DumbCoder das ist eine riesige Liste.Ich wollte nur wissen, ob es irgendwelche großen Unterschiede b/w diese beiden gibt. Die meisten der auf Line-Programmierung Wettbewerbe wie SPOJ haben diese beiden Versionen von C++, wenn es keinen Unterschied b/w sie dann SPOJ hätte nur die letztere Version (dh neueste, wie SPOJ haben für andere Programmiersprachen Compiler) –

Antwort

13

Es ist wirklich nicht so eine "riesige Liste", wenn Sie daran interessiert sind, die C++ Änderungen zwischen den beiden.

4.0.0.8 ist nur ein Patch-Revision 4.0, deren Release Notes sind hier: http://gcc.gnu.org/gcc-4.0/changes.html

4.3.2 ist ein Patch Revision 4.3, deren Release Notes sind hier: http://gcc.gnu.org/gcc-4.3/changes.html

Wenn Sie schauen Bei den Unterschieden zwischen ihnen denke ich, dass die folgende Liste die wichtigsten Unterschiede zwischen GCC 4.0 und 4.3 enthält, die Sie wirklich interessieren würden.

GCC 4.3.2 hat (einschließlich Änderungen von GCC 4.1 und GCC 4.2):

Experimental support for the ISO C++0x standard (das ist ein Link)

  • long long ist nun offiziell in C unterstützt ++ (obwohl es eine war Erweiterung in älteren GCC sowieso zur Verfügung gestellt)
  • Vorlage extern wird unterstützt
  • Rechtwinklige Klammern, wie Sie sie in std::vector<std::vector<int>> sehen, werden nun unterstützt (beachten Sie das Fehlen eines Leerzeichens zwischen den beiden > am Ende der Deklaration).
  • experimental support for Variadic Template Arguments
  • Static assertions
  • und einige andere

Mehr TR1 Bibliothek Unterstützung

  • <regex> (gcc 4.3), <random> (gcc 4.2) und <complex> (gcc 4.2)

Die C++ - Sichtbarkeit wurde überarbeitet. (GCC 4.2)

Beschränkte visiblity aus Klassen Mitglieder von Funktionen zu den lokalen statischen propagiert und von Vorlagen und Vorlagen Argumente an Instanziierungen, sofern diese nicht erklärt Sichtbarkeit hat.

Das Sichtbarkeitsattribut für eine Klasse muss zwischen dem Klassenschlüssel und dem Namen stehen, nicht nach der schließenden Klammer.

Attribute sind jetzt für Enums und elaborated-type-specifiers erlaubt, die nur einen Typ deklarieren.

Mitglieder des anonymen Namespace sind jetzt lokal für eine bestimmte Übersetzungseinheit, zusammen mit allen anderen Deklarationen, die sie verwenden, obwohl sie immer noch so behandelt werden, dass sie eine externe Verknüpfung für Sprachsemantik haben.

ein nicht dokumentiertes Vorlage Verlängerung in GCC 4.2 entfernt wurde

Die (nicht dokumentiert) Verlängerung (wurde in 4.1 veraltet), die Vorlagen mit Standardargumente gestattet Vorlage Vorlage Parameter mit weniger Parametern gebunden zu sein wurde entfernt. Zum Beispiel:

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

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

template void f(S<double>); 

wird nicht mehr von G akzeptiert ++. Der Grund, warum dieser Code nicht akzeptiert wird, ist, dass S eine Vorlage mit zwei Parametern ist; daher kann es nicht an C gebunden werden, das nur einen Parameter hat.


Zusätzlich prüfen die porting to GCC 4.3 guide, wo einige wichtige Dinge ist, wie:

abwärtskompatibel/veraltet Header entfernt worden sind.

Meist bedeutet dies eine Reihe von Pre-Standard-Header entfernt wurde, wie <iostream.h> (die Standard-<iostream> verwenden), <hash_map.h> (verwenden <tr1/unordered_map>) <hashtable.h> (verwenden <tr1/unordered_map> oder <tr1/unordered_set> je nach Bedarf) usw. Auch hier keine große Sache.

Strengere Durchsetzung von Standards

Zum Beispiel die Unterschrift auf main ‚s mit zwei Argumenten muss korrekt sein.

Keine doppelte Funktion Parameternamen

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

Und es wurden verschiedene Fehlerkorrekturen, sowie Änderungen, die ich glaube wirklich nicht beeinflussen, wie Sie den Wettbewerb Code (wie Entfernung schreiben würde/Hinzufügen von neuen Compiler-Flags), und Entfernen von Sachen wie die <? und >? Operatoren (jemals diese verwendet?).

Alles in allem glaube ich nicht, dass die Unterschiede zwischen den beiden Ihnen viel Kummer bereiten werden, wenn Sie Code für beide Compiler schreiben mussten.

0

Sie wundern sich über den Unterschied zwischen zwei verschiedenen Versionen von g ++? Es ist zwei übliche Version von GNU C++ - Compilern. Verschiedene Linux-Versionen können unterschiedliche Versionen von g ++ enthalten. Wie meine aktuelle CentOS 5.5 hat g ++ 4.1.2 damit.

Für Sie Feature-Details, überprüfen Sie den Link in Ihren Kommentaren.

0

Da die 4.3.2 neuer als 4.0.0.8 ist, ist sie standardkonformer. Für Details, müssen Sie Dokumentation und Release-Änderungen überprüfen

Verwandte Themen