Compilar o C++11 com o g++

Estou a tentar actualizar o meu compilador C++ para C++11. Procurei um pouco e cheguei à conclusão de que tenho de usar a bandeira -std=c++0x ou -std=gnu++0x, mas não sei muitas coisas sobre bandeiras. Alguém me pode ajudar? (Estou a usar Ubuntu 12.04.)

Aqui está o erro que recebo do compilador quando tento usar uma biblioteca que está incluída em C++11 (isto é, array):

#include <array>
#include <iostream>

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

este ficheiro necessita de suporte de compilador e biblioteca para o próximo C++ISO normal, C++0x.este suporte é actualmente experimental e deverá estar activo com as opções do compilador-std=c++0x ou-std=gnu++0x.

Author: nbro, 2012-04-28

5 answers

As opções (ou opções do compilador) não são mais do que argumentos normais da linha de comandos passados ao executável do compilador.

Assumindo que está a invocar o g++ na linha de comandos (terminal):

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

Ou

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

Se o acima não funcionar.

 558
Author: Oskar N., 2012-04-28 13:22:02

Pode verificar o seu g++ por comando:

which g++
g++ --version

Isto dir-lhe-á qual o comparador que está a apontar.

Para mudar para g++ 4.7 (assumindo que o instalou na sua máquina), execute:

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

Depois seleccione 2 como selecção(a minha máquina já aponta para g++ 4, 7, de modo que o*)

Uma vez que você muda o complier, em seguida, Executar novamente {[[7]} para verificar que a mudança aconteceu corretamente.

Agora compile o seu programa com
g++ -std=c++11 your_file.cpp -o main
 46
Author: Harajyoti Das, 2013-08-18 16:02:51

O seu Ubuntu tem definitivamente uma versão suficientemente recente de {[[0]}. A bandeira a usar é -std=c++0x.

 15
Author: Michael Slade, 2020-09-11 11:40:14

Se quiser manter as extensões do compilador GNU, use-std=gnu++0x em vez de-std=c++0x. aqui está uma citação da página man:

O compilador pode aceitar várias normas de base, tais como c89 ou C++98, e dialetos GNU desses padrões, como gnu89 ou gnu++98. Por especificando um padrão base, o compilador irá aceitar todos os programas seguindo esse padrão e aqueles que usam extensões GNU que não contradiga-o. Por exemplo, - std=c89 desliga certas características de GOLFO que são incompatíveis com a norma ISO C90, tais como a " asm "e a"tip of" palavras-chave, mas não outras extensões GNU que não têm significado em ISO C90, tal como omitir o termo médio de a "?:" expressao. No por outro lado, ao especificar um dialeto GNU de um padrão, todos os recursos o Suporte de compilador está habilitado, mesmo quando essas características mudam o significado do padrão de base e alguns programas estritos-conformes podem ser rejeitado. A norma em particular é usada por pedantic para identificar quais recursos são extensões GNU dada essa versão do padrão. Por exemplo-std=gnu89-pedantic alertaria sobre o estilo c++ // comments, while-std=gnu99-pedantic would not.

 12
Author: , 2012-04-28 13:38:55

Pode referir-se ao seguinte link para o qual as funcionalidades são suportadas em determinada versão do compilador. Ele tem uma lista exaustiva de recursos de suporte no compilador. Olha o GCC segue o padrão de perto e implementa antes de qualquer outro compilador.

Em relação à sua pergunta, pode 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 o C++20, embora todas as funcionalidades do C++20 ainda não sejam suportadas, consulte este link para a lista de suporte de funcionalidades no GCC.

A lista muda muito rapidamente, fique de olho na lista, se estiver à espera que uma característica particular seja suportada.

 12
Author: yadhu, 2018-08-05 18:52:55