Skip to content

Commit

Permalink
C++26 未初期化値の読み取り : 未定義動作になりえるケースを記載
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Oct 7, 2024
1 parent 30cfb4e commit 7d2188d
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion lang/cpp26/erroneous_behavior_for_uninitialized_reads.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ int main() {
}
```
未初期化の値は、コンパイラやターゲット環境によって定義された固定値である。コンパイラにはこの誤りを診断することが許可され、推奨されているが、誤りを無視して有効な読み取りとして扱うことも許可されている。このコードは誤りではあるが、未定義動作に関連する結果に遭遇するリスクはない
未初期化の値は、コンパイラやターゲット環境によって定義された固定値である。コンパイラにはこの誤りを診断することが許可され、推奨されているが、誤りを無視して有効な読み取りとして扱うことも許可されている。このコードは誤りではあるが、実行ごとに異なる動作をしたり攻撃者に値を制御されたりといったリスクはなくなる
「erroneous behavior」は未定義動作とはちがって、明確に定義された動作をするがコードとして正しくない、ということを規定するものであり、処理系に対して有用な診断を提供するものである。
Expand Down Expand Up @@ -124,6 +124,17 @@ int main() {
| 契約違反 | 契約に関する現在の策定作業では、契約違反時になにが起こるべきかという問題に直面している。「erroneous behavior」という概念は有用な回答を与えてくれる可能性がある |


## 備考
- 以下のようなケースでは、erroneous behaviorではなく未定義動作を引き起こす可能性がある:
```cpp
T* p; // 未初期化のポインタ。erroneous value (例としてヌルポインタ) をもつ
bool b; // 未初期化の真理値。erroneous valueとして、
// 妥当ではないbool値 (trueでもfalseでもない値) をもつ可能性がある

f(*p); // 間接参照は未定義動作を引き起こす
g(b); // bが妥当な値である場合にerroneous behavior、そうでなければ未定義動作
```


## 参照
- [P2795R5 Erroneous behaviour for uninitialized reads](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2795r5.html)

0 comments on commit 7d2188d

Please # to comment.