namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:attributspezifizierer
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:attributspezifizierer [2018-10-19 21:17] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Attributspezifizierer ======
  
 +Seit [[..:kennen:begriffe#C++11]] können Hinweise für Compiler in doppelten eckigen Klammern ''[%%%%[...]]'' hinterlegt werden.
 +Unbekannte Attribute werden vom Compiler ignoriert.
 +
 +Die Sprachstandards definieren einige Attribute.
 +
 +===== C++11 =====
 +<code cpp>
 +[[noreturn]] void f() { throw ""; }
 +</code>
 +Die Funktion wird nicht auf normalem Wege beendet.
 +
 +===== C++14 =====
 +<code cpp>
 +struct [[deprecated]] X {};
 +[[deprecated("Nutze g()")]] void f();
 +void g(int [[deprecated]] x = 10);
 +</code>  
 +markiert geächtete Namen. 
 +Der Compiler kann bei deren Nutzung eine Warnung ausgeben.
 +
 +===== C++17 =====
 +In manchen Mehrfachverzweigungen fehlt die ''break''-Anweisung absichtlich. 
 +Vor den Sprungmarken kann darauf hingeweisen werden, 
 +so dass der Compiler nicht davor warnen muss:
 +<code cpp>
 +switch (x)
 +{
 +  case 0:
 +  case 1:
 +      // ... 
 +  [[fallthrough]]
 +  case 2:
 +      // ...
 +      break;
 +  default: 
 +      // ...
 +}    
 +</code>  
 +Das Attribut ''%%[%%[nodiscard]]'' 
 +weist darauf hin, dass der Typ als Ergebnis eines Ausdrucks oder Funktionsaufrufs nicht ignoriert werden darf.
 +''%%[%%[maybe_unused]]''
 +unterdrückt Compilerwarnungen zu unbenutzten Variablen oder Funktionen.
 +
 +<code cpp>
 +struct [[nodiscard]] X {};
 +
 +X f(){ return {}; }
 +
 +int main()
 +{
 +    f();       // Warnung: Rückgabewert ignoriert
 +    (void)f(); // ok
 +    [[maybe_unused]] auto result = f(); // ok
 +}
 +</code>
 +  
kennen/attributspezifizierer.txt · Zuletzt geändert: 2018-10-19 21:17 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki