std::ignore
| Definiert in der Header-Datei <tuple> |
||
| Definiert in der Header-Datei <utility> |
||
| (1) | ||
const /*ignore-type*/ ignore; |
(seit C++11) (bis C++14) |
|
| constexpr /*ignore-type*/ ignore; |
(seit C++14) (inline seit C++17) |
|
| (2) | ||
struct /*ignore-type*/ { |
(seit C++11) (bis C++14) (nur Exposition*) |
|
| struct /*ignore-type*/ { |
(seit C++14) (nur Exposition*) |
|
std::ignore.Inhalt |
[bearbeiten] Anmerkungen
Ein Ausdruck vom Typ void oder ein Wert eines flüchtigen Bitfelds kann std::ignore nicht zugewiesen werden.
std::ignore ist für die Verwendung mit std::tie beim Entpacken eines std::tuple bestimmt, als Platzhalter für die nicht verwendeten Argumente, kann aber für jede unerwünschte Zuweisung verwendet werden.
Einige Codierungsrichtlinien empfehlen die Verwendung von std::ignore, um Warnungen vor nicht verwendeten Rückgabewerten von Funktionen mit dem Attribut [[nodiscard]] zu vermeiden, auch wenn keine Zuweisung erforderlich ist.
Zum Ignorieren von Werten, die keine Zuweisung erfordern, kann man nach void casten. Für Variablen mit Namen, deren Werte jedoch nicht verwendet werden, kann man diese nach void casten oder diese Variablen mit [[maybe_unused]] deklarieren.
[bearbeiten] Beispiel
- Demonstriert die Verwendung von
std::ignorezusammen mit einer Funktion, die mit[[nodiscard]]markiert ist. - Entpackt ein von std::pair<iterator, bool> zurückgegebenes Paar, das von std::set::insert() zurückgegeben wird, speichert aber nur den booleschen Wert.
#include <iostream> #include <set> #include <string> #include <tuple> [[nodiscard]] int dontIgnoreMe() { return 42; } int main() { std::ignore = dontIgnoreMe(); std::set<std::string> set_of_str; if (bool inserted{false}; std::tie(std::ignore, inserted) = set_of_str.insert("Test"), inserted) std::cout << "Value was inserted successfully.\n"; }
Ausgabe
Value was inserted successfully.
[bearbeiten] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2773 | C++14 | std::tuple wurde zu constexpr gemacht, aber std::ignore war noch nicht |
zu constexpr gemacht |
| P2968R2 | C++11 | Das Verhalten von std::ignore außerhalb von std::tie war nicht formell spezifiziert |
vollständig spezifiziert |
[bearbeiten] Siehe auch
| (C++11) |
erstellt ein tuple von Lvalue-Referenzen oder entpackt ein Tupel in einzelne Objekte (Funktionsvorlage) |