2010-12-30 17 views
6

¿Cuál es la diferencia entre g ++ 4.0.0.8 y g ++ 4.3.2? Estos dos son los compiladores de C++ más comunes que he visto utilizados en diversos concursos de programación.¿Cuáles son las diferencias entre g ++ versión 4.0.0.8 y 4.3.2?

Intenté googlearlo, pero no encontré nada.

+5

Pago en detalle -> http://gcc.gnu.org/releases.html – DumbCoder

+1

@DumbCoder Esa es una lista enorme. Solo quería saber si hay diferencias importantes entre estos dos. La mayoría de los las competiciones de programación de línea como SPOJ tienen estas dos versiones de C++, si no hubiera habido ninguna diferencia b/w entonces SPOJ solo tendría la última versión (es decir, la última, como SPOJ tiene para otros compiladores de lenguaje de programación) –

Respuesta

13

Realmente no es una "gran lista", teniendo en cuenta que está interesado en los cambios de C++ entre los dos.

4.0.0.8 es sólo una revisión de parche 4.0, cuyas notas de liberación está aquí: http://gcc.gnu.org/gcc-4.0/changes.html

4.3.2 es una revisión de parche 4.3, cuyas notas son la liberación aquí: http://gcc.gnu.org/gcc-4.3/changes.html

si nos fijamos En las diferencias entre ellos, creo que la siguiente lista cubre las diferencias más importantes entre GCC 4.0 y 4.3 que realmente te interesarían.

GCC 4.3.2 tiene (incluyendo cambios de GCC 4.1 y GCC 4.2):

Experimental support for the ISO C++0x standard (eso es un enlace)

  • long long ahora es compatible oficialmente en C++ (aunque era una extensión proporcionada en el GCC anterior de todos modos)
  • Se admite la plantilla extern
  • ahora son compatibles los corchetes angulares como lo vería en std::vector<std::vector<int>> (tenga en cuenta la falta de espacio entre los dos > al final de la declaración).
  • experimental support for Variadic Template Arguments
  • Static assertions
  • y algunos otros

Más apoyo TR1 biblioteca

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

El control de la visibilidad en C++ ha sido revisado. (GCC 4.2)

del visiblity restringido se propaga desde las clases a los miembros, a partir de las funciones de la estática locales, ya partir de plantillas y argumentos de plantilla de instancias, la visibilidad a menos que ésta haya declarado explícitamente.

El atributo de visibilidad para una clase debe venir entre la clase-clave y el nombre, no después de la llave de cierre.

Los atributos ahora están permitidos para enumeraciones y especificadores de tipos elaborados que solo declaran un tipo.

Los miembros del espacio de nombres anónimo son ahora locales para una unidad de traducción particular, junto con cualquier otra declaración que los use, aunque todavía se los trata como si tuvieran enlaces externos para la semántica del lenguaje.

Una extensión plantilla indocumentado se eliminó a GCC 4.2 (desfasada y en 4,1)

El (no documentado) de extensión que permitió plantillas con argumentos por defecto en obligarse a los parámetros de plantilla plantilla con menos parámetros ha sido removido. Por ejemplo:

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

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

template void f(S<double>); 

ya no es aceptada por G ++. La razón por la cual no se acepta este código es que S es una plantilla con dos parámetros; por lo tanto, no se puede vincular a C que tiene solo un parámetro.


Además, marque la porting to GCC 4.3 guide, donde algunas cosas importantes es, como:

hacia atrás cabeceras compatibles/obsoletas se han eliminado.

Mayormente esto significa un montón de cabeceras pre-estándar se han eliminado, como <iostream.h> (utilizar el estándar <iostream>), <hash_map.h> (uso <tr1/unordered_map>) <hashtable.h> (uso <tr1/unordered_map> o <tr1/unordered_set> dependiendo de las necesidades), etc. De nuevo, no una Vaya cosa.

aplicación más estricta de las normas

Por ejemplo, la firma en formato de dos argumentos main 's debe ser correcta.

nombres de los parámetros

Sin función duplicado

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

y se han realizado diversas correcciones de errores, así como los cambios no creo que realmente afectan la forma en que iba a escribir código de competencia (como la eliminación/adición de nuevos indicadores del compilador) y la eliminación de elementos como los operadores <? y >? (¿alguna vez se han utilizado?).

En general, no creo que las diferencias entre los dos le causen mucha pena si tuviera que escribir código para ambos compiladores.

0

¿Se está preguntando sobre la diferencia entre dos versiones diferentes de g ++? Es una versión común de los compiladores GNU C++. Diferentes versiones de Linux pueden tener una versión diferente de g ++ incluida con él. Al igual que mi CentOS 5.5 actual tiene g ++ 4.1.2 con él.

Para que usted tenga detalles, revise el enlace en sus comentarios.

0

Dado que el 4.3.2 es más nuevo que el 4.0.0.8, es más compatible con el estándar. Para obtener más información, debe verificar la documentación y liberar los cambios

Cuestiones relacionadas