Gå till innehåll
Just nu i M3-nätverket

Hur vet jag om kompilatorn kompilerar med c++11?


Bamseyoung

Rekommendera Poster

Hur vet jag om kompilatorn kompilerar med c++11 standarden när jag skriver g++?

Har gcc version 4.6.3.

Testade att skriva g++ -std=c++11 -pedantic -Wall -Wextra [filnamn.cpp] men får då felmeddelande "cc1plus: error: unrecognized command line option '-std=c++11'"

Så den kanske redan kompilerar med c++11 standarden?

Jag vill lära mig hur den nya "slumpgeneratorn" fungerar som ska finnas i c++11.Om ni kan den får ni gärna berätta hur den fungerar.

Istället för det gamla sättet

srand(time(0);
cout << rand()%6+1<< endl;

om man kan skriva såhär om jag förstår det rätt? http://www.cplusplus...evice/operator()/

random_device random;
random()%6+1;

Självklart har jag inkluderat respektive bibliotek som behövs.

Länk till kommentar
Dela på andra webbplatser

Flaggan skall vara följande om det skall fungera i gcc -std=c++0x

Länk till kommentar
Dela på andra webbplatser

Hur löste du det?

 

Prövade detta

http://superuser.com...4/394811#394811(byt självklart ut 4.6 till 4.7) för att installera senaste gcc versionen 4.7.2

Provade själv före med att bara skriva

sudo apt-get install gcc-4.7

sudo apt-get install g++-4.7

men tydligen så fungerar inte det, den laddade ner en massa saker fast med en närmare koll med "gcc --version" så visade den fortfarande den gamla versionen.

Dock till slut så kunde jag köra med -std=c++11 istället för -std=c++0x som tydligen gällde för gcc 4.6.3.

Länk till kommentar
Dela på andra webbplatser

Flaggan skall vara följande om det skall fungera i gcc -std=c++0x

 

Märkte det med lite sökande på google. Men är nu fixade med senaste uppdateringen av gcc så kan skriva -std=c++11

Men varför ska man ange dessa flaggor? Är det inte rätt så självklart när man har den senaste versionen av en kompilator att den ska kompilera med det allra senaste finesserna utan att man verkligen ska behöva lägga till denna flagga? Inte direkt att filerna går sönder om man kompilerar ett innehåll som inte har någon kod av de senaste finesserna med c++11.

Länk till kommentar
Dela på andra webbplatser

Märkte det med lite sökande på google. Men är nu fixade med senaste uppdateringen av gcc så kan skriva -std=c++11

Men varför ska man ange dessa flaggor? Är det inte rätt så självklart när man har den senaste versionen av en kompilator att den ska kompilera med det allra senaste finesserna utan att man verkligen ska behöva lägga till denna flagga? Inte direkt att filerna går sönder om man kompilerar ett innehåll som inte har någon kod av de senaste finesserna med c++11.

 

Är väll rätt få befintliga c++ projekt som de facto har gått över och nyttjar vissa "features" i c++11 viket gör att om detta skulle vara standard inställningen skulle många befintliga c++ projekt och deras byggsystem som ex make inte bygga vilket kanske skulle skapa mer problem än om man vet med sig att man byggt något med den absolut senaste tekniken och då anger den explicit i sin make fil, för väldigt få sitter ju och handknackar sina byggskricpt direkt i terminalen utan använder sig exempelvis av en make-fil eller liknande byggsystem för sin c++ kod.

Länk till kommentar
Dela på andra webbplatser

När man startar upp ett projekt väljer man utvecklingsmiljö. Om du mitt i ett projekt byter version på kompilatorn så måste alla tester osv göras om, kan bli väldigt kostsamt.

Länk till kommentar
Dela på andra webbplatser

När man startar upp ett projekt väljer man utvecklingsmiljö. Om du mitt i ett projekt byter version på kompilatorn så måste alla tester osv göras om, kan bli väldigt kostsamt.

 

Precis! Man byter nog tidigast kompilatorversion efter en release annars är overheaden för att garantera projektets integritet för högt för att det skall ge en vettig ROI (Return of investnent).

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...