Compilar o C++11 com o g++
-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.
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.
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 comg++ -std=c++11 your_file.cpp -o main
O seu Ubuntu tem definitivamente uma versão suficientemente recente de {[[0]}. A bandeira a usar é -std=c++0x
.
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.
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
-
g++ -std=c++11
para C++11 -
g++ -std=c++14
para C++14 -
g++ -std=c++17
para C++17 -
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.