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