std:: ignore
|
ヘッダーで定義
<tuple>
|
||
|
ヘッダーで定義
<utility>
|
||
| (1) | ||
|
const
/*ignore-type*/
ignore
;
|
(C++11以降)
(C++14まで) |
|
|
constexpr
/*ignore-type*/
ignore
;
|
(C++14以降)
(C++17以降はインライン) |
|
| (2) | ||
|
struct
/*ignore-type*/
{
|
(C++11以降)
(C++14まで) ( 説明専用* ) |
|
|
struct
/*ignore-type*/
{
|
(C++14以降)
( 説明専用* ) |
|
std::ignore
の型。
目次 |
注記
void
式またはvolatileビットフィールド値を
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
を作成する、またはtupleを個々のオブジェクトに展開する
(関数テンプレート) |