2010-12-30 16 views
6

Jaka jest różnica między g ++ 4.0.0.8 i g ++ 4.3.2? Te dwa to najpopularniejsze kompilatory C++, które widziałem w różnych konkursach programistycznych.Jakie są różnice między wersją g ++ 4.0.0.8 i 4.3.2?

Próbowałem google, ale nic nie znalazłem.

+5

Zamówienie w szczegółach -> http://gc.gnu.org/releases.html – DumbCoder

+1

@DumbCoder to ogromna lista. Chciałem tylko wiedzieć, czy są jakieś poważne różnice między tymi dwoma. Większość z nich konkursy programowania liniowego, takie jak SPOJ, mają te dwie wersje C++, jeśli nie było w nich żadnej różnicy, to SPOJ miałby tylko tę ostatnią wersję (tj. najnowszą, jak SPOJ ma dla innych kompilatorów języków programowania) –

Odpowiedz

13

To naprawdę nie jest taka wielka lista, biorąc pod uwagę, że interesują cię zmiany C++ między tymi dwoma.

4.0.0.8 jest tylko wersja patch 4.0, którego release notes tutaj: http://gcc.gnu.org/gcc-4.0/changes.html

4.3.2 to wersja patch 4.3, którego nuty uwolnienie tutaj: http://gcc.gnu.org/gcc-4.3/changes.html

Jeśli spojrzeć na różnice między nimi, myślę, że poniższa lista obejmuje najważniejsze różnice między GCC 4.0 i 4.3, które naprawdę obchodzi.

GCC 4.3.2 ma (w tym zmian od GCC 4.1 i GCC 4.2):

Experimental support for the ISO C++0x standard (to link)

  • long long jest teraz oficjalnie obsługiwane w języku C++ (choć było to rozszerzenie dostarczone w starszym GCC i tak)
  • Szablon extern jest obsługiwany
  • Wsporniki kątowe podobne do tych, które można zobaczyć w std::vector<std::vector<int>>, są teraz obsługiwane (uwaga na brak odstępu między dwoma > na końcu deklaracji).
  • experimental support for Variadic Template Arguments
  • Static assertions
  • i inni

Więcej TR1 wsparcie biblioteki

  • <regex> (GCC 4.3) <random> (GCC 4.2) oraz <complex> (GCC 4.2)

Obsługa widoczności w C++ została zmieniona. (GCC 4.2)

Restricted visiblity jest propagowana z klas członków, z funkcjami do lokalnych statycznych i od szablonów i argumentów szablonu do dawałaby, chyba że ten ostatni wyraźnie oświadczył widoczność.

Atrybut widoczności dla klasy musi znajdować się między kluczem klasy a nazwą, a nie po nawiasie zamykającym.

Atrybuty są teraz dozwolone dla wyliczeń i specyfikatorów określonego typu, które deklarują tylko typ.

Członkowie anonimowej przestrzeni nazw są teraz lokalni dla określonej jednostki tłumaczeniowej, wraz z innymi deklaracjami, które ich używają, mimo że są nadal traktowani jako mające zewnętrzne powiązania dla semantyki języka.

nieudokumentowany przedłużenie szablon usunięto GCC 4,2 (został przestarzałe w 4.1)

(Nieudokumentowana) przedłużenie co pozwoliło szablonów z domyślnymi argumentów wiązać się parametry szablonu matrycy mniej parametrów zostało usunięte. Na przykład:

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

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

template void f(S<double>); 

nie jest akceptowana przez g ++. Powód, dla którego ten kod nie jest akceptowany, jest taki, że S jest szablonem z dwoma parametrami; dlatego nie może być związany z C, który ma tylko jeden parametr.


Dodatkowo sprawdź porting to GCC 4.3 guide, gdzie niektóre ważne rzeczy jest, jak:

wstecznie kompatybilne/nieaktualne nagłówki zostały usunięte.

większości Oznacza to, że wiązka wstępnie standardowych nagłówków zostały usunięte, jak <iostream.h> (użyciu standardowego <iostream>) <hash_map.h> (zastosować <tr1/unordered_map>) <hashtable.h> nie (zastosować <tr1/unordered_map> lub <tr1/unordered_set> w zależności od potrzeb), itp Ponownie Wielka rzecz.

Surowsze egzekwowanie standardów

Na przykład, podpis na formularzu dwóch argumentów main „s muszą być poprawne.

Nie duplikat funkcyjne Nazwy parametrów

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

i nie było wiele poprawek, a także zmiany nie sądzę naprawdę wpływają na sposób chcesz napisać kod konkurencji (jak usuwanie/dodanie nowych flag kompilatora) i usunięcie obiektów, takich jak operatory <? i >? (kiedykolwiek używane?).

Podsumowując, nie sądzę, aby różnice między nimi powodowały wiele smutku, gdyby trzeba było napisać kod dla obu kompilatorów.

0

Zastanawiasz się nad różnicą między dwiema różnymi wersjami g ++? Jest to dwie powszechne wersje kompilatorów GNU C++. Różne wydania Linuksa mogą zawierać inną wersję g ++. Podobnie jak moje obecne CentOS 5.5 ma g ++ 4.1.2 z nim.

Dla Ciebie szczegóły funkcji, sprawdź link w Tobie komentarze.

0

Ponieważ wersja 4.3.2 jest nowsza niż 4.0.0.8, jest bardziej zgodna z normą. Aby uzyskać szczegółowe informacje, należy sprawdzić dokumentację i wprowadzić zmiany

Powiązane problemy