Skip to content

Commit

Permalink
返り値、返値 : 訳語表に基づいて「戻り値」に修正
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Feb 16, 2023
1 parent 5419582 commit ba05560
Show file tree
Hide file tree
Showing 11 changed files with 27 additions and 27 deletions.
6 changes: 3 additions & 3 deletions lang/cpp17/folding_expressions.md
Expand Up @@ -200,16 +200,16 @@ template<typename BinaryFunction> struct empty_fold

この方法は可能な限りジェネリックであるが、以下のような問題があった:

* 空のパラメータパックは型付けされていないが、返り値の型は他の型に文脈的に変換可能である (暗黙の型変換につながり得る)
* 空のパラメータパックは型付けされていないが、戻り値の型は他の型に文脈的に変換可能である (暗黙の型変換につながり得る)
* テンプレート特殊化だけのために関数をオブジェクトしなければならない
* サポートする演算子と等価な関数オブジェクト間のマッピングを用意しなければならない

結局のところこれは問題の解決にはつながらず、負担も大きいことから採用されなかった。


##### 返り値の型推論
##### 戻り値の型推論

可能であれば空の畳み込みから返り値の型推論を行い、そうでなければプログラムを不適格とする。
可能であれば空の畳み込みから戻り値の型推論を行い、そうでなければプログラムを不適格とする。
例えば以下の例では `std::string` に推論する:
```cpp
auto res = (std::string(args) + ...);
Expand Down
8 changes: 4 additions & 4 deletions reference/cmath.md
Expand Up @@ -62,11 +62,11 @@
なお、C++11 の記載にある無条件のキャストは規格のバグとされたため、C++11 であってもスコープ付き列挙型や explicit な変換演算子のあるクラス型に、上記規則にある無条件のキャストが適用されると想定すべきではない。
([LWG 2086. Overly generic type support for math functions](http://cplusplus.github.io/LWG/lwg-defects.html#2086) 参照)

各関数の個別ページでは、上記のオーバーロード関数をコードで示す際には、引数や返値の型を斜体で示す
各関数の個別ページでは、上記のオーバーロード関数をコードで示す際には、引数や戻り値の型を斜体で示す
```cpp
Integral // 任意の整数型
Arithmetic // 任意の算術型
Promoted // 決定された返値型
Promoted // 決定された戻り値型
```
* Integral[italic]
* Arithmetic[italic]
Expand Down Expand Up @@ -447,8 +447,8 @@ NaN を返さなければならないが定義域エラーを報告してはな
| [`FP_FAST_FMA`](cmath/fp_fast_fma.md) | `double` 型の `fma` 関数がより高速な実装であるか | C++11 |
| [`FP_FAST_FMAF`](cmath/fp_fast_fmaf.md) | `float` 型の `fma` 関数がより高速な実装であるか | C++11 |
| [`FP_FAST_FMAL`](cmath/fp_fast_fmal.md) | `long double` 型の `fma` 関数がより高速な実装であるか | C++11 |
| [`FP_ILOGB0`](cmath/fp_ilogb0.md) | `ilogb(0)` の返値を表す整数定数式 | C++11 |
| [`FP_ILOGBNAN`](cmath/fp_ilogbnan.md) | `ilogb(NaN)` の返値を表す整数定数式 | C++11 |
| [`FP_ILOGB0`](cmath/fp_ilogb0.md) | `ilogb(0)` の戻り値を表す整数定数式 | C++11 |
| [`FP_ILOGBNAN`](cmath/fp_ilogbnan.md) | `ilogb(NaN)` の戻り値を表す整数定数式 | C++11 |
| [`MATH_ERRNO`](cmath/math_errno.md) | 数学ライブラリ内で`errno`にエラーが設定されたかを表す整数定数 | C++11 |
| [`MATH_ERREXCEPT`](cmath/math_errexcept.md) | 数学ライブラリ内で浮動小数点例外が発生したかを表す整数定数 | C++11 |
| [`math_errhandling`](cmath/math_errhandling.md) | `<cmath>` 内の関数がエラーをどのように取り扱うかを表すマクロ | C++11 |
Expand Down
2 changes: 1 addition & 1 deletion reference/cmath/beta.md
Expand Up @@ -64,7 +64,7 @@ beta(2, 4) = 0.05
GCC 7.1.0–8.0.0 では `beta`[`exp`](exp.md)[`lgamma`](lgamma.md) を用いて
$ |\mathrm{B}(x, y)| = \exp(\ln |\Gamma(x) \Gamma(y) / \Gamma(x + y)|)) $
を計算する。
`x < 0 || y < 0` でも定義域エラーを報告せずに値を返すが、返り値は必ず正になる
`x < 0 || y < 0` でも定義域エラーを報告せずに値を返すが、戻り値は必ず正になる


## 参照
Expand Down
2 changes: 1 addition & 1 deletion reference/cmath/fp_ilogb0.md
Expand Up @@ -9,7 +9,7 @@
* implementation_defined[italic]
## 概要
`FP_ILOGB0` は、[`std::ilogb`](ilogb.md)`(0)` の返り値を表す整数定数式である
`FP_ILOGB0` は、[`std::ilogb`](ilogb.md)`(0)` の戻り値を表す整数定数式である
[`INT_MIN`](/reference/climits/int_min.md) と `-`[`INT_MAX`](/reference/climits/int_max.md) のうち少なくとも片方と等しい値でなければならない。
Expand Down
2 changes: 1 addition & 1 deletion reference/cmath/fp_ilogbnan.md
Expand Up @@ -9,7 +9,7 @@
* implementation_defined[italic]
## 概要
`FP_ILOGBNAN` は、[`std::ilogb()`](ilogb.md) に `NaN` を渡したときの返り値を表す整数定数式である
`FP_ILOGBNAN` は、[`std::ilogb()`](ilogb.md) に `NaN` を渡したときの戻り値を表す整数定数式である
[`INT_MIN`](/reference/climits/int_min.md) と [`INT_MAX`](/reference/climits/int_max.md) いずれかと等しい値でなければならない。
Expand Down
2 changes: 1 addition & 1 deletion reference/cstddef/size_t.md
Expand Up @@ -13,7 +13,7 @@ namespace std {
`size_t`は、オブジェクトのバイト数を表現できる程度に十分に大きい符号なし整数型である。
C++03まではC言語と同じく「`sizeof`演算子によって返される符号なし整数型」と規定されていた。
オブジェクトのバイト数(例えば[`malloc`](/reference/cstdlib.md)の引数)やコンテナの要素数(例えば[`std::size()`](/reference/iterator/size.md)の返り値)を表現するために用いられる。
オブジェクトのバイト数(例えば[`malloc`](/reference/cstdlib.md)の引数)やコンテナの要素数(例えば[`std::size()`](/reference/iterator/size.md)の戻り値)を表現するために用いられる。
## 例
```cpp example
Expand Down
2 changes: 1 addition & 1 deletion reference/tuple/make_from_tuple.md
Expand Up @@ -25,7 +25,7 @@ namespace std {
また、型`T`の初期化はそのコンストラクタで行われ集成体初期化は考慮されない。つまり、`Tuple`に含まれる型が空かただ一つの`T`でない場合、型`T`は集成体(aggregate)であってはならない(C++17のみ、C++20以降はok)。
更に、C++23以降は`make_from_tuple`の返り値が参照である場合でダングリング参照を生成しないために、`make_from_tuple`の内部で`T`が構築される際に、`Tuple`から取得されるオブジェクト(参照の初期化であるので、`Tuple`のサイズは1である必要がある)の寿命が延長されないことも要求され、これを満たさない場合はコンパイルエラーとなる。
更に、C++23以降は`make_from_tuple`の戻り値が参照である場合でダングリング参照を生成しないために、`make_from_tuple`の内部で`T`が構築される際に、`Tuple`から取得されるオブジェクト(参照の初期化であるので、`Tuple`のサイズは1である必要がある)の寿命が延長されないことも要求され、これを満たさない場合はコンパイルエラーとなる。
正確には、[`tuple_size_v`](tuple_size.md)`<`[`remove_reference_t`](/reference/type_traits/remove_reference.md)`<Tuple>> == 1`である場合、[`reference_constructs_from_temporary_v`](/reference/type_traits/reference_constructs_from_temporary.md)`<T, decltype(get<0>(`[`declval`](/reference/utility/declval.md)`<Tuple>()))> == false`であること。
## 引数
Expand Down
2 changes: 1 addition & 1 deletion reference/tuple/tuple_cat.md
Expand Up @@ -28,7 +28,7 @@ namespace std {
- `Tuples...`の全ての型が[`std::tuple`](tuple.md)`<Args...>`であること。
- `Args...`の各型が左辺値参照であればコピー構築可能、そうでなければムーブ構築可能であること。
- C++23から :
- 本関数の返り値の[`tuple`](tuple.md)のテンプレートパラメーターパックを`Ctypes`とし、`Ctypes`の全ての要素について、引数`tpls`において対応する要素の型から構築可能であること。
- 本関数の戻り値の[`tuple`](tuple.md)のテンプレートパラメーターパックを`Ctypes`とし、`Ctypes`の全ての要素について、引数`tpls`において対応する要素の型から構築可能であること。
- より厳密には、次のように定義を行い、`(`[`is_constructible_v`](/reference/type_traits/is_constructible.md)`<CTypes, decltype(celems)> && ...) == true`であること。
- `n`を`sizeof...(Tuples)`とし、`i`を範囲`[0, n)`における整数値とする
- `T(i)`を`Tuples`の`i`番目とする
Expand Down
4 changes: 2 additions & 2 deletions reference/type_traits/is_invocable_r.md
Expand Up @@ -66,8 +66,8 @@ int main()

std::cout << "1" << std::endl;

// INVOKE、つまり std::invoke の返り値である S が
// R に束縛されて R の寿命と同じ寿命に延長された上で std::invoke_r の返り値となる
// INVOKE、つまり std::invoke の戻り値である S が
// R に束縛されて R の寿命と同じ寿命に延長された上で std::invoke_r の戻り値となる
// しかし R の寿命はこの1文の間だけなので、S もこの1文が終了する際に破棄される
const S& a = std::invoke_r<R>([]() { return S{}; });

Expand Down
12 changes: 6 additions & 6 deletions reference/type_traits/reference_constructs_from_temporary.md
Expand Up @@ -37,9 +37,9 @@ namespace std {
## 備考
多くのメタ関数は`pvalue`と`xvalue`を区別しないが、このメタ関数は区別する。例えば、右辺値参照に「返り値の型が右辺値参照である関数」の返り値を束縛することを考える。(再現コードは、説明の最後に付す)
多くのメタ関数は`pvalue`と`xvalue`を区別しないが、このメタ関数は区別する。例えば、右辺値参照に「戻り値の型が右辺値参照である関数」の戻り値を束縛することを考える。(再現コードは、説明の最後に付す)
この事自体は即座に不適格とはならない。しかし、その関数が実際には`pvalue`を返しているとすれば、その`pvalue`は返り値の時点で右辺値参照に束縛されるため、それを右辺値参照に束縛したとしても寿命は延長されることはない。そのため、最終的にダングリング参照を生じることとなる。
この事自体は即座に不適格とはならない。しかし、その関数が実際には`pvalue`を返しているとすれば、その`pvalue`は戻り値の時点で右辺値参照に束縛されるため、それを右辺値参照に束縛したとしても寿命は延長されることはない。そのため、最終的にダングリング参照を生じることとなる。
このような場面においては、本メタ関数が`pvalue`と`xvalue`を、`pvalue`を`T`(参照なしの型)として、`xvalue`を`T&&`(右辺値参照である型、転送参照(Forwarding Reference) を意味しているわけではない)として区別すれば検出が可能となる。
Expand All @@ -55,11 +55,11 @@ S&& f() { return S{}; }
int main() {
std::cout << "1" << std::endl;
// f の返り値は s に束縛されて寿命が延長されたか?
// 実際にはこの宣言の1文が終了した際に f の返り値は破棄されている
// f の戻り値は s に束縛されて寿命が延長されたか?
// 実際にはこの宣言の1文が終了した際に f の戻り値は破棄されている
S&& s(f());
std::cout << "2" << std::endl;
}
Expand Down
12 changes: 6 additions & 6 deletions reference/type_traits/reference_converts_from_temporary.md
Expand Up @@ -33,9 +33,9 @@ namespace std {
## 備考
多くのメタ関数は`pvalue`と`xvalue`を区別しないが、このメタ関数は区別する。例えば、右辺値参照に「返り値の型が右辺値参照である関数」の返り値を束縛することを考える。(再現コードは、説明の最後に付す)
多くのメタ関数は`pvalue`と`xvalue`を区別しないが、このメタ関数は区別する。例えば、右辺値参照に「戻り値の型が右辺値参照である関数」の戻り値を束縛することを考える。(再現コードは、説明の最後に付す)
この事自体は即座に不適格とはならない。しかし、その関数が実際には`pvalue`を返しているとすれば、その`pvalue`は返り値の時点で右辺値参照に束縛されるため、それを右辺値参照に束縛したとしても寿命は延長されることはない。そのため、最終的にダングリング参照を生じることとなる。
この事自体は即座に不適格とはならない。しかし、その関数が実際には`pvalue`を返しているとすれば、その`pvalue`は戻り値の時点で右辺値参照に束縛されるため、それを右辺値参照に束縛したとしても寿命は延長されることはない。そのため、最終的にダングリング参照を生じることとなる。
このような場面においては、本メタ関数が`pvalue`と`xvalue`を、`pvalue`を`T`(参照なしの型)として、`xvalue`を`T&&`(右辺値参照である型、転送参照(Forwarding Reference) を意味しているわけではない)として区別すれば検出が可能となる。
Expand All @@ -51,11 +51,11 @@ S&& f() { return S{}; }
int main() {
std::cout << "1" << std::endl;
// f の返り値は s に束縛されて寿命が延長されたか?
// 実際にはこの宣言の1文が終了した際に f の返り値は破棄されている
// f の戻り値は s に束縛されて寿命が延長されたか?
// 実際にはこの宣言の1文が終了した際に f の戻り値は破棄されている
S&& s = f();
std::cout << "2" << std::endl;
}
Expand Down

0 comments on commit ba05560

Please sign in to comment.