Namespaces
Variants

C++ attribute: maybe_unused (since C++17)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
Attributes
(C++23)
(C++11) (until C++26)
(C++14)
(C++20)
maybe_unused
(C++17)
(C++17)
(C++11)
(C++20)

Unterdrückt Warnungen zu nicht verwendeten Entitäten.

Inhaltsverzeichnis

Syntax

[ [ maybe_unused ] ]

Erklärung

Dieses Attribut kann in der Deklaration der folgenden Entitäten erscheinen:

(seit C++26)

Für Entitäten, die mit [ [ maybe_unused ] ] deklariert werden, wird die Warnung zu ungenutzten Entitäten, die vom Compiler ausgegeben wird, unterdrückt, falls die Entitäten oder ihre strukturierten Bindungen ungenutzt bleiben.

Für deklarierte Labels [ [ maybe_unused ] ] wird, falls sie ungenutzt sind, die Compiler-Warnung über ungenutzte Labels unterdrückt.

(since C++26)

Beispiel

#include <cassert>
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
                        [[maybe_unused]] bool thing2)
{
    [[maybe_unused]] lbl: // die Marke „lbl“ wird nicht verwendet, keine Warnung
    [[maybe_unused]] bool b = not false and not true;
    assert(b); // im Release-Modus wird assert entfernt und „b“ ungenutzt
               // keine Warnung, da es als [[maybe_unused]] deklariert ist
} // Parameter „thing1“ und „thing2“ werden nicht verwendet, keine Warnung
int main() {}

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
CWG 2360 C++17 konnte [ [ maybe_unused ] ] nicht auf strukturierte Bindungen anwenden erlaubt

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 9.12.8 Maybe-unused-Attribut [dcl.attr.unused]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 9.12.7 Maybe-unused-Attribut [dcl.attr.unused]
  • C++17-Standard (ISO/IEC 14882:2017):
  • 10.6.6 Vielleicht unbenutztes Attribut [dcl.attr.unused]

Siehe auch

C-Dokumentation für maybe_unused