Unterschiedlicher Ausnahme-Spezifizierer mit g ++ 6.2

8

Könnte mir jemand erklären, warum dieser Code nicht mit g ++ Version 6.2.0 kompiliert, sondern mit clang ++ Version 3.9.0-svn274438-1 und icpc Version 16.0.2 kompiliert.

%Vor%     
BigDawg 28.08.2016, 07:23
quelle

2 Antworten

4

Verwenden Sie C ++ 11 oder später?

Der ursprüngliche Operator new () Deklarationen in C ++ 98

%Vor%

Wurde in C ++ 11 geändert, um noexcept Schlüsselwort zu verwenden:

%Vor%

Referenzlink

    
Palec 28.08.2016, 08:00
quelle
1

In GCC 6 hat der Standardmodus für C ++ geändert in < stark> C ++ 14 . Bis GCC 5 war es C ++ 98 .

Die Deklaration operator new hat sich in C ++ 11 leicht geändert. Es hat mit der Tatsache zu tun, dass die Spezifikation der Wurfausnahme in C veraltet ist ++ 11 und die Einführung der Deklaration nothrow :

  • throw (std::bad_alloc) wurde weggelassen
  • throw() wird durch nothrow ersetzt

Um die bestmögliche Rückwärtskompatibilität zu erreichen, sollten Sie mit dem Argument -std angeben, auf welchen C ++ - Standard Sie zielen:

%Vor%     
rustyx 28.08.2016 08:33
quelle

Tags und Links