Namensräume
Varianten
Aktionen

std::ignore

Von cppreference.com
< cpp‎ | utility‎ | tuple
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
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*/

{
    template< class T >
    const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }

};
(seit C++11)
(bis C++14)
(nur Exposition*)
struct /*ignore-type*/

{
    template< class T >
    constexpr const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }

};
(seit C++14)
(nur Exposition*)
1) Ein Objekt, dem jeder Wert ohne Auswirkung zugewiesen werden kann.
2) Der Typ von 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

  1. Demonstriert die Verwendung von std::ignore zusammen mit einer Funktion, die mit [[nodiscard]] markiert ist.
  2. 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) [edit]