Namespaces
Variants

std::ignore

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
Swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <tuple>
で定義<utility>
const /*ignore-type*/ ignore;
ヘッダ で定義 (1)
(C++11以上)
constexpr /*ignore-type*/ ignore;
(C++14まで)
(C++14以上)
struct /*ignore-type*/
{
    template< class T >
    const /*ignore-type*/& operator=( const T& ) const noexcept
    {
        return *this;
    }
};
(C++17以降インライン) (2)
(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 式またはvolatileビットフィールド値を std::ignore に代入することはできません。

std::ignore は、 std::tie と共に std::tuple を展開する際に、使用されない引数のプレースホルダーとして使用することを意図していますが、不要な代入に対して任意に使用することができます。

一部のコーディングガイドでは、代入が必須ではない場合でも、 std::ignore を使用して [[ nodiscard ]] 属性が付いた関数の未使用戻り値による警告を回避することを推奨しています。

値の代入を必要としない無視対象については、 void へのキャストが利用できます。名前はあるが値が使用されない変数については、 void へのキャスト、または [[ maybe_unused ]] 属性を用いた変数宣言が利用できます。

例

  1. std::ignore の使用法を [[ nodiscard ]] 関数と組み合わせて実演します。
  2. 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 を作成する、またはtupleを個々のオブジェクトに展開する
(関数テンプレート)