Spec-Zone.ru › C++

std::ignore

Определено в заголовке <tuple>
const /*unspecified*/ ignore;
(с C++11)
(до C++17)
inline constexpr /*unspecified*/ ignore;
(с C++17)

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

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

Возможная реализация

namespace detail {
struct ignore_t
{
    template <typename T>
    constexpr // required since C++14
    void operator=(T&&) const noexcept {}
};
}
inline constexpr detail::ignore_t ignore; // 'const' only until C++17

Пример

  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;
    bool inserted = false;
    std::tie(std::ignore, inserted) = set_of_str.insert("Test");
    if (inserted)
        std::cout << "Value was inserted successfully\n";
}

Вывод:

Value was inserted successfully

См. также

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

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

Spec-Zone.ru

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