std::ignore
| Определён в заголовочном файле <tuple>
|
||
| Определён в заголовочном файле <utility>
|
||
const /*ignore-type*/ ignore;
|
(1) | (начиная с C++11) (до C++14) |
constexpr /*ignore-type*/ ignore;
|
(начиная с C++14) (inline начиная с 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
или значение волатильного битового поля не может быть присвоено
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-ссылок или распаковывает tuple в отдельные объекты
(шаблон функции) |