kennen:attributspezifizierer
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 [[..: | ||
+ | Unbekannte Attribute werden vom Compiler ignoriert. | ||
+ | |||
+ | Die Sprachstandards definieren einige Attribute. | ||
+ | |||
+ | ===== C++11 ===== | ||
+ | <code cpp> | ||
+ | [[noreturn]] void f() { throw ""; | ||
+ | </ | ||
+ | Die Funktion wird nicht auf normalem Wege beendet. | ||
+ | |||
+ | ===== C++14 ===== | ||
+ | <code cpp> | ||
+ | struct [[deprecated]] X {}; | ||
+ | [[deprecated(" | ||
+ | void g(int [[deprecated]] x = 10); | ||
+ | </ | ||
+ | markiert geächtete Namen. | ||
+ | Der Compiler kann bei deren Nutzung eine Warnung ausgeben. | ||
+ | |||
+ | ===== C++17 ===== | ||
+ | In manchen Mehrfachverzweigungen fehlt die '' | ||
+ | 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: | ||
+ | // ... | ||
+ | } | ||
+ | </ | ||
+ | Das Attribut '' | ||
+ | weist darauf hin, dass der Typ als Ergebnis eines Ausdrucks oder Funktionsaufrufs nicht ignoriert werden darf. | ||
+ | '' | ||
+ | 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 | ||
+ | } | ||
+ | </ | ||
+ | |
kennen/attributspezifizierer.txt · Zuletzt geändert: 2018-10-19 21:17 von 127.0.0.1