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) (только для иллюстрации*) |
std::ignore.Примечания
Выражение типа void или значение volatile-битового поля нельзя присвоить std::ignore.
std::ignore предназначен для использования с std::tie при распаковке std::tuple в качестве заполнителя для неиспользуемых аргументов, но его можно использовать для любого ненужного присваивания.
В некоторых руководствах по написанию кода рекомендуется использовать std::ignore, чтобы избежать предупреждений о неиспользуемых возвращаемых значениях функций [[nodiscard]], хотя присваивание и не требуется.
Чтобы игнорировать значения, не требующие присваивания, их можно привести к типу void. Переменные с именами, значения которых не используются, можно привести к типу void или объявить с помощью [[maybe_unused]].
Пример
- Демонстрируется использование
std::ignoreвместе с функцией[[nodiscard]]. - Распаковывается
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-ссылок или распаковывает кортеж в отдельные объекты (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/tuple/ignore