std::ignore
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| Определено в заголовочном файле <tuple>
|
||
const /*не определено*/ ignore; |
(начиная с C++11) (до C++17) |
|
inline constexpr /*не определено*/ ignore; |
(начиная с C++17) | |
Объект неопределённого типа, которому можно присвоить любое значение без какого-либо эффекта. Предназначен для использования с std::tie при распаковке std::tuple в качестве заполнителя для неиспользуемых аргументов.
Хотя поведение std::ignore за пределами std::tie формально не указано, в некоторых руководствах по коду рекомендуется использовать std::ignore, чтобы избежать предупреждений о неиспользуемом возвращаемом значении функций [[nodiscard]].
Возможная реализация
namespace detail {
struct ignore_t {
template <typename T>
constexpr // требуется начиная с C++14
void operator=(T&&) const noexcept {}
};
}
inline constexpr detail::ignore_t ignore; // 'const' только до C++17
|
Пример
- Демонстрирует использование
std::ignoreвместе с функцией[[nodiscard]]. - Распаковывает
std::pair<iterator, bool>, возвращённыйstd::set::insert(), но сохраняет только логическое значение.
Запустить этот код
#include <iostream>
#include <string>
#include <set>
#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("Тест");
if (inserted) {
std::cout << "Значение успешно вставлено\n";
}
}
Вывод:
Значение успешно вставлено
Смотрите также
| создаёт std::tuple левосторонних ссылок или распаковывает кортеж на отдельные объекты (шаблон функции) |