Spec-Zone.ru › C++

std::ignore

Определено в заголовочном файле <tuple>
Определено в заголовочном файле <utility>
const /*ignore-type*/ ignore;
(1) (начиная с C++11)
(до C++14)
constexpr /*ignore-type*/ ignore;
(начиная с C++14)
(встроенная переменная начиная с C++17)
struct /*ignore-type*/
{
    template< class T >
    const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }
};
(2) (начиная с 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 или значение volatile-битового поля нельзя присвоить 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 не было формально определено полностью определено

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/tuple/ignore

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API