名前空間
変種
操作

属性: nodiscard (C++17以上)

提供: cppreference.com
< cpp‎ | language‎ | attributes
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定(C++20未満)
noexcept 指定子(C++11)
例外
名前空間
指定子
decltype(C++11)
auto(C++11)
alignas(C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr(C++11)
ユーザ定義(C++11)
ユーティリティ
属性(C++11)
typedef 宣言
型エイリアス宣言(C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 
 

nodiscard 宣言された関数、または nodiscard 宣言された列挙またはクラスを値返しする関数が、 void へのキャスト以外の値を破棄する式から呼ばれた場合、コンパイラは警告を発することが推奨されます。

目次

[編集]構文

[[nodiscard]] (1)
[[nodiscard(string-literal)]] (2) (C++20以上)
string-literal - 戻り値を破棄すべきでない論拠を説明するために使用できるテキスト

[編集]説明

関数宣言、列挙宣言、またはクラス宣言に現れます。

void へのキャスト以外の値を破棄する式から

  • nodiscard 宣言された関数が呼ばれた、または
  • nodiscard 宣言された列挙またはクラスを値返しする関数が呼ばれた、または
  • nodiscard 宣言されたコンストラクタが明示的な型変換または static_cast によって呼ばれた、または
  • nodiscard 宣言された列挙またはクラス型のオブジェクトが明示的な型変換または static_cast によって初期化された

場合、コンパイラは警告を発行することが推奨されます。

string-literal (もし指定された場合) は、通常、警告に含まれます。

(C++20以上)

[編集]

struct[[nodiscard]] error_info {}; error_info enable_missile_safety_mode();void launch_missiles();void test_missiles(){ enable_missile_safety_mode();// nodiscard な値の破棄をコンパイラが警告するかもしれません。 launch_missiles();} error_info& foo();void f1(){ foo();// nodiscard な型ですが、値で返されていないため、警告はありません。}


[編集]欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
P1771R1 C++17 nodiscard on constructors has no effect can cause a warning if the constructed object is discarded

[編集]標準ライブラリ

以下の標準ライブラリの関数は nodiscard 属性付きで宣言されます。

確保関数
確保関数
(関数)[edit]
未初期化記憶域を確保します
(std::allocator<T>のパブリックメンバ関数)[edit]
[静的]
アロケータを使用して未初期化記憶域を確保します
(std::allocator_traits<Alloc>のパブリック静的メンバ関数)[edit]
メモリを確保します
(std::pmr::memory_resourceのパブリックメンバ関数)[edit]
メモリを確保します
(std::pmr::polymorphic_allocator<T>のパブリックメンバ関数)[edit]
外側のアロケータを使用して未初期化記憶域を確保します
(std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>のパブリックメンバ関数)[edit]
間接アクセス
(C++17)
ポインタ最適化バリア
(関数テンプレート)[edit]
ポインタがアラインされていることをコンパイラに伝えます
(関数テンプレート)[edit]
空かどうか調べる関数
(C++17)
コンテナが空かどうか調べます
(関数)[edit]
ノードハンドルが空かどうか調べます
(node handleのパブリックメンバ関数)
コンテナが空かどうか調べます
(std::array<T,N>のパブリックメンバ関数)[edit]
文字列が空かどうか調べます
(std::basic_string<CharT,Traits,Allocator>のパブリックメンバ関数)[edit]
ビューが空かどうか調べます
(std::basic_string_view<CharT,Traits>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::deque<T,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::forward_list<T,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::list<T,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::map<Key,T,Compare,Allocator>のパブリックメンバ関数)[edit]
マッチが成功したかどうか調べます
(std::match_results<BidirIt,Alloc>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::multimap<Key,T,Compare,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::multiset<Key,Compare,Allocator>のパブリックメンバ関数)[edit]
ベースとなるコンテナが空かどうか調べます
(std::priority_queue<T,Container,Compare>のパブリックメンバ関数)[edit]
ベースとなるコンテナが空かどうか調べます
(std::queue<T,Container>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::set<Key,Compare,Allocator>のパブリックメンバ関数)[edit]
シーケンスが空かどうか調べます
(std::span<T,Extent>のパブリックメンバ関数)[edit]
ベースとなるコンテナが空かどうか調べます
(std::stack<T,Container>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::unordered_map<Key,T,Hash,KeyEqual,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::unordered_multiset<Key,Hash,KeyEqual,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::unordered_set<Key,Hash,KeyEqual,Allocator>のパブリックメンバ関数)[edit]
コンテナが空かどうか調べます
(std::vector<T,Allocator>のパブリックメンバ関数)[edit]
パスが空かどうか調べます
(std::filesystem::pathのパブリックメンバ関数)[edit]
その他
(C++11)
(場合によっては新しいスレッドで) 非同期に関数を実行し、その結果を保持する std::future を返します
(関数テンプレート)[edit]
close