[c++] Compilando C ++ 11 con g ++


Answers

Puedes verificar tu g++ por comando:

which g++
g++ --version

esto le dirá qué compilador está apuntando actualmente.

Para cambiar a g++ 4.7 (suponiendo que lo haya instalado en su máquina), ejecute:

sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   60        auto mode
  1            /usr/bin/gcc-4.6   60        manual mode
* 2            /usr/bin/gcc-4.7   40        manual mode

Luego seleccione 2 como selección (Mi máquina ya apunta a g++ 4.7, por lo que *)

Una vez que cambie el compilador, nuevamente ejecute g++ --version para verificar que la conmutación haya sucedido correctamente.

Ahora compila tu programa con

g++ -std=c++11 your_file.cpp -o main
Question

Estoy tratando de actualizar mi compilador 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, una matriz):

#include <array>
#include <iostream>

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

This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.




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 man:

El compilador puede aceptar varios estándares base, 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 los que usen extensiones de 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 de 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 características que admite el compilador están habilitadas, incluso cuando esas características cambian el significado del estándar base y algunos programas de estricto cumplimiento pueden ser rechazados. El estándar particular es utilizado por -pedantic para identificar qué características son extensiones de GNU dada esa versión del estándar. Por ejemplo, std = gnu89 -pedantic advertiría sobre el estilo C ++ // comentarios, mientras que -std = gnu99 -pedantic no lo haría.




Related