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 |
Пример
- Демонстрирует использование
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;
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
См. также
|
(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