Namespaces
Variants

std::ignore

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
 
Défini dans l'en-tête <tuple>
Défini dans l'en-tête <utility>
const /*ignore-type*/ ignore;
(1) (depuis C++11)
(jusqu'à C++14)
constexpr /*ignore-type*/ ignore;
(depuis C++14)
(inline depuis c++17)
struct /*ignore-type*/
{
    template< class T >
    const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }
};
(2) (depuis C++11)
(jusqu'à C++14)
(exposition uniquement*)
struct /*ignore-type*/
{
    template< class T >
    constexpr const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }
};
(depuis C++14)
(exposition uniquement*)
1) Un objet auquel toute valeur peut être assignée sans effet.
2) Le type de std::ignore.

Notes

Une expression void ou une valeur de champ de bits volatile ne peut pas être assignée à std::ignore .

std::ignore est destiné à être utilisé avec std::tie lors du déballage d'un std::tuple , comme espace réservé pour les arguments qui ne sont pas utilisés, mais peut être utilisé pour toute assignation non désirée.

Certains guides de code recommandent d'utiliser std::ignore pour éviter les avertissements liés aux valeurs de retour non utilisées des fonctions [[ nodiscard ]] , même lorsqu'une assignation n'est pas nécessaire.

Pour ignorer les valeurs ne nécessitant pas d'assignation, on peut effectuer un cast vers void . Pour les variables qui possèdent des noms, mais dont la valeur n'est pas utilisée, on peut les caster vers void ou les déclarer avec [[ maybe_unused ]] .

Exemple

  1. Démontre l'utilisation de std::ignore avec une fonction [[ nodiscard ]] .
  2. Déstructure une std:: pair < iterator, bool > retournée par std:: set :: insert ( ) , mais ne conserve que le booléen.
#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";
}

Sortie :

Value was inserted successfully.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 2773 C++14 std::tuple a été rendu constexpr mais std::ignore ne l'était pas encore rendu constexpr
P2968R2 C++11 le comportement de std::ignore en dehors de std::tie n'était pas formellement spécifié entièrement spécifié

Voir aussi

(C++11)
crée un tuple de références de lvalue ou décompose un tuple en objets individuels
(modèle de fonction)