Namespaces
Variants

std:: ignore

From cppreference.net
Utilities library
Определено в заголовке <tuple>
Определено в заголовке <utility>
(1)
const /*ignore-type*/ ignore ;
(начиная с C++11)
(до C++14)
constexpr /*ignore-type*/ ignore ;
(начиная с C++14)
(inline начиная с C++17)
(2)
struct /*ignore-type*/

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

} ;
(начиная с C++11)
(до C++14)
( только для демонстрации* )
struct /*ignore-type*/

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

} ;
(начиная с C++14)
( только для демонстрации* )
1) Объект, которому можно присвоить любое значение без какого-либо эффекта.
2) Тип std::ignore .

Содержание

Примечания

Выражение типа void или значение волатильного битового поля не может быть присвоено std::ignore .

std::ignore предназначен для использования с std::tie при распаковке std::tuple в качестве заполнителя для неиспользуемых аргументов, но может использоваться для любых нежелательных присваиваний.

Некоторые руководства по кодированию рекомендуют использовать std::ignore для избежания предупреждений от неиспользуемых возвращаемых значений [[ nodiscard ]] функций, даже если присваивание не требуется.

Для игнорирования значений, не требующих присваивания, можно выполнить приведение к void . Для переменных, которые имеют имена, но чьи значения не используются, можно выполнить приведение к void или объявить эти переменные с атрибутом [[ maybe_unused ]] .

Пример

  1. Демонстрирует использование std::ignore вместе с функцией [[ nodiscard ]] .
  2. Распаковывает std:: pair < iterator, bool > , возвращаемый методом std:: set :: insert ( ) , но сохраняет только булево значение.
#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";
}

Вывод:

Value was inserted successfully.

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 2773 C++14 std::tuple был сделан constexpr , но std::ignore ещё не был сделан constexpr
P2968R2 C++11 поведение std::ignore вне контекста std::tie не было формально специфицировано полностью специфицировано

Смотрите также

(C++11)
создает tuple из lvalue-ссылок или распаковывает tuple в отдельные объекты
(шаблон функции)