最終更新日時(UTC): 2026年02月26日 03時48分19秒
Akira Takahashi が更新

履歴 編集

function
<header_name>

# std::class_name::page_title (1行目の見出し1はページのタイトルです。修飾なしで記載してください)(C++17)

(cpprefjpを編集するには および cpprefjpでのMarkdown記法の制限と拡張 を先に読んで下さい。)

( サンプルコードは文章中のどの部分で書いても大丈夫です。閲覧者の理解を助けるために必要だと感じたところで入れてください。 その際拡張構文である`example`タグをルールに従って付け、コンパイル・実行可能にすることを検討してください。 )

    void definition(); // 関数・変数・定数の宣言を記述します。

(非推奨・削除となった場合は、その旨を記載し、代わりの機能に誘導します)

(例：この関数は、C++14から非推奨となり、C++17で削除された。代わりに`shuffle()`関数を使用すること。)

## 概要

(ここには、関数・変数・定数の概要を記述します。必須事項です。)

(必要な項目を省略する場合には、「(執筆中)」と書いておいてください。)

## 要件

(ここには、関数を実行するための事前条件、型への要件などを記述します。とくになければ、項目を削除してください。この項目は、今後は「テンプレートパラメータ制約」「適格要件」「事前条件」「事後条件」など、より細分化された項目で記載してください。)

## テンプレートパラメータ制約

(ここには、関数がオーバーロード解決に参加するための条件を記載します。SFINAE-friendlyな関数の条件、制約テンプレートによるオーバーロードの条件などを記載します。)

## 適格要件

(ここには、満たさなければプログラムが不適格となる要件を記載します。`static_assert`や関数のdelete宣言などに相当します。規格ではMandatesの項目です。)

## 事前条件

(ここには、関数を実行するための値の事前条件を記述します。契約属性の`[[expects]]`に相当します。)

## 堅牢化された事前条件

(ここには、関数を実行するための値の事前条件を記述します。規格ではHardened preconditionsの項目です。)

## 効果

(ここには、関数の内部で発生する効果を記述します。戻り値しかないような関数の場合には、項目を削除してください。)

## 同期操作

(ここには、関数の同期操作について記述します。規格の Synchronization 要素に対応します。対応要素がない場合は、項目を削除してください。)

## 戻り値

(ここには、関数の戻り値を記述します。戻り値の型が`void`の場合は、「なし」と記述してください。)

## 事後条件

(ここには、関数を実行した結果が満たすべき事後条件を記述します。契約属性の`[[ensures]]`に相当します。)

## 計算量

(ここには、アルゴリズムの計算量を記述します。規格上とくに明記がなければ、項目を削除してください。)

## 例外

(ここには、例外送出の有無、例外送出の条件と送出される例外、例外を送出しない条件、例外送出後の変数・オブジェクトの状態 (例外安全性) などを記述します。`noexcept`なら「投げない」を記述します。規格上とくに明記がなければ、項目を削除してください。)

## トリビアルに定義される条件

(コンストラクタや代入演算子などの特殊関数がトリビアルに定義される条件を記述します。)

## delete定義される条件

(関数がdelete定義される条件を記述します。)

## 定数式に評価される条件

(関数が`constexpr`評価される条件を記述します。)

## explicitになる条件

(コンストラクタや変換演算子が`explicit`になる条件を記述します。)

## 備考

(ここには、関数・変数・定数を説明するにあたっての、補足事項を記述します。とくになければ、項目を削除してください。)

## この機能が必要になった背景・経緯

(ここには、その機能が必要になった背景や経緯を記述します。その機能で解決したい問題は何だったのかは、ユーザーがその言語機能を実際に使う上で重要な情報となります。余裕があったら書いてください)

## 非推奨・削除の詳細

(非推奨・削除となった背景を記載します。)

## 例

    // (ここには、関数・変数・定数を解説するための、サンプルコードを記述します。)
    // (インクルードとmain()関数を含む、実行可能なサンプルコードを記述してください。そのようなコードブロックにはexampleタグを付けます。)

    #include <iostream>

    int main()
    {
      int variable = 0;
      std::cout << variable << std::endl;
    }

(コードブロック中の識別子に、文字色を付ける例です。)

### 出力

    0

(ここには、サンプルコードの実行結果を記述します。何も出力がない場合は、項目を削除せず、空の出力にしてください。)
(実行結果が処理系・実行環境によって異なる場合は、項目名を「出力例」に変更し、可能であればその理由も併記してください。)

## 実装例

    // (ここには、その関数・変数・定数の、実装例を記述します。)
    // (とくに必要がないと判断した場合、項目を削除してください。)

## バージョン

### 言語

- C++11

### 処理系

- Clang: 1.9 ✅, 2.9 ✅, 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅
- GCC: 4.3.6 ✅, 4.4.7 ✅, 4.5.3 ✅, 4.6.3 ✅, 4.7.2 ✅, 4.8.1 ✅
- ICC: 10.1 ✅, 11.0 ✅, 11.1 ✅, 12.0 ✅
- Visual C++: 2003 ✅, 2005 ✅, 2008 ✅, 2010 ✅, 2012 ✅

(ここには、その機能が存在する言語のバージョンと、確認がとれたコンパイラとそのバージョンを記述します。)
(これらの項目を削除した場合、C++03のあらゆる環境で使用できることを意味します。) (確認のテストできないときは、??を記述してください。)

### 備考

(処理系ごとに存在するバグや注意事項を記述します。とくにない場合は、項目を削除してください。)

## 関連項目

(ここには、その機能と関連のあるcpprefjpサイト内の項目へのリンクを記述します。とくに必要がないと判断した場合、項目を削除してください。)

## 参照

(ここには、その関数・変数・定数を理解するにあたっての参考資料や、関連する機能へのリンクを記述します。とくに必要がないと判断した場合、項目を削除してください。)

- P0788R3 Standard Library Specification in a Concepts and Contracts World
- P3471R4 Standard library hardening