g++ compiler c++ 11




Compilando C++ 11 con g++ (4)

Estoy intentando actualizar mi compilador de C ++ a C ++ 11. He buscado un poco y he llegado a la conclusión de que tengo que usar el indicador -std=c++0x o -std=gnu++0x , pero no sé muchas cosas acerca de los indicadores. ¿Alguien puede ayudarme? (Estoy usando Ubuntu 12.04.)

Aquí está el error que recibo del compilador cuando intento usar una biblioteca que está incluida en C ++ 11 (es decir, matriz):

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

Este archivo requiere soporte de compilador y biblioteca para el próximo estándar ISO C ++, C ++ 0x. Este soporte es actualmente experimental y debe habilitarse con las opciones del compilador -std = c ++ 0x o -std = gnu ++ 0x.


Los indicadores (o las opciones del compilador) no son más que argumentos ordinarios de línea de comando que se pasan al ejecutable del compilador.

Suponiendo que está invocando g ++ desde la línea de comandos (terminal):

$ g++ -std=c++11 your_file.cpp -o your_program

o

$ g++ -std=c++0x your_file.cpp -o your_program

Si lo anterior no funciona.


Puede consultar el siguiente link para ver qué funciones se admiten en una versión particular del compilador. Tiene una lista exhaustiva de soporte de características en el compilador. Looks GCC sigue de cerca el estándar e implementa antes que cualquier otro compilador.

Respecto a tu pregunta puedes compilar usando

  1. g++ -std=c++11 para C ++ 11
  2. g++ -std=c++14 para C ++ 14
  3. g++ -std=c++17 para C ++ 17
  4. g++ -std=c++2a para C ++ 20, aunque todavía no se admiten todas las funciones de C ++ 20, consulte este link para obtener la lista de funciones de GCC.

La lista cambia bastante rápido, vigile la lista, si está esperando que se admita una función en particular.


Si desea mantener las extensiones del compilador GNU, use -std = gnu ++ 0x en lugar de -std = c ++ 0x. Aquí hay una cita de la página del manual:

El compilador puede aceptar varios estándares básicos, como c89 o c ++ 98, y dialectos GNU de esos estándares, como gnu89 o gnu ++ 98. Al especificar un estándar base, el compilador aceptará todos los programas que sigan ese estándar y aquellos que usen extensiones GNU que no lo contradigan. Por ejemplo, -std = c89 desactiva ciertas funciones de GCC que son incompatibles con ISO C90, como las palabras clave "asm" y "typeof", pero no otras extensiones GNU que no tienen un significado en ISO C90, como omitir el término medio de una expresión "?:". Por otro lado, al especificar un dialecto GNU de un estándar, todas las funciones que admite el compilador están habilitadas, incluso cuando esas características cambian el significado del estándar básico y algunos programas de conformidad estricta pueden ser rechazados. El estándar en particular se usa por -pedantic para identificar qué características son extensiones GNU dada esa versión del estándar. Por ejemplo, std = gnu89 -pedantic advertiría sobre el estilo de C ++ // comentarios, mientras que -std = gnu99 -pedantic no lo haría.


Tu ubuntu definitivamente tiene una versión suficientemente reciente de g ++. La bandera a usar es -std=c++0x .







flags