名前空間
変種
操作

std::ignore

From cppreference.com
< cpp‎ | utility‎ | tuple
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダ <tuple> で定義
ヘッダ <utility> で定義
(1)
const /*ignore-type*/ ignore;
(C++11以降)
(C++14まで)
constexpr /*ignore-type*/ ignore;
(C++14以降)
(C++17以降inline)
(2)
struct /*ignore-type*/

{
    template< class T >
    const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }

};
(C++11以降)
(C++14まで)
(説明用*)
struct /*ignore-type*/

{
    template< class T >
    constexpr const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }

};
(C++14以降)
(説明用*)
1) あらゆる値を代入しても効果がないオブジェクト。
2) std::ignoreの型。

目次

[編集] 備考

void 式または揮発性ビットフィールド値はstd::ignoreに代入できません。

std::ignoreは、std::tupleをアンパックする際に使用されない引数のプレースホルダーとしてstd::tieと一緒に使用することを意図していますが、不要な代入にも使用できます。

一部のコードガイドでは、代入が必須ではないにもかかわらず、[[nodiscard]]関数の未使用の戻り値による警告を回避するためにstd::ignoreを使用することを推奨しています。

代入が不要な値を無視するには、voidにキャストできます。名前はあるが値が使用されていない変数の場合、それらをvoidにキャストするか、[[maybe_unused]]でそれらの変数を宣言できます。

[編集]

  1. std::ignore[[nodiscard]]関数の使用方法を示します。
  2. std::set::insert()が返すstd::pair<iterator, bool>をアンパックしますが、ブール値のみを保存します。
#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::tupleconstexprになりましたが、std::ignoreはまだ constexprではありませんでした。
P2968R2 C++11 std::tie以外のstd::ignoreの動作は正式に指定されていませんでした。 完全に指定されました。

[編集] 関連項目

(C++11)
左辺値参照のtupleを生成するか、タプルを個別のオブジェクトにアンパックする
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)