Estoy tratando de actualizar mi compilador de C ++ a C ++ 11. He buscado un poco y he llegado a la conclusión de que tengo que usar la bandera -std=c++0x
o -std=gnu++0x
, pero no sé muchas cosas sobre las banderas. ¿Alguien puede ayudarme? (Estoy usando Ubuntu 12.04.)
Aquí está el error que obtengo 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.
-std=c++11
en su lugar. Quizás ambos están permitidos, sin embargo.g++-4.6
por defecto (que solo es compatible-std=c++0x
)g++
, por ejemplog++ -std=c++0x _filename_ && ./a.out
.Respuestas:
Las banderas (u opciones del compilador) no son más que argumentos de línea de comandos comunes pasados al ejecutable del compilador.
Suponiendo que está invocando g ++ desde la línea de comando (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.
fuente
-Wall -g
justo despuésg++
-Werror
también, no hay razón para no hacerlo al comenzar un proyecto.Puede verificar su
g++
por comando:esto le dirá qué compilador está apuntando actualmente.
Para cambiar a
g++
4.7 (suponiendo que lo haya instalado en su máquina), ejecute:Luego seleccione
2
como selección (Mi máquina ya apunta ag++
4.7, entonces el *)Una vez que cambie el cumplidor, vuelva a ejecutarlo
g++ --version
para verificar que el cambio se haya realizado correctamente.Ahora compile su programa con
fuente
Su ubuntu definitivamente tiene una versión suficientemente reciente de g ++. La bandera a usar es
-std=c++0x
.fuente
I'm using Ubuntu 12.04.
en la pregunta.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:
fuente
?:
operador binario ? La única otra extensión que viene a la mente, las expresiones de estructura, es reemplazada por la inicialización de la lista de C ++ 11. En cualquier caso, esta cita se refiere principalmente a C, no a C ++.Puede consultar el siguiente enlace para ver qué características son compatibles con una versión particular del compilador. Tiene una lista exhaustiva de soporte de características en el compilador. Parece que GCC sigue de cerca el estándar y lo implementa antes que cualquier otro compilador.
Con respecto a su pregunta, puede compilar usando
g++ -std=c++11
para C ++ 11g++ -std=c++14
para C ++ 14g++ -std=c++17
para C ++ 17g++ -std=c++2a
para C ++ 20, aunque todavía no se admiten todas las funciones de C ++ 20, consulte este enlace para ver la lista de funciones admitidas en GCC.La lista cambia bastante rápido, manténgase atento a la lista, si está esperando que se admita una función particular.
fuente