Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C++26 エラー性動作
Search
Akira Takahashi
December 20, 2024
Technology
2
950
C++26 エラー性動作
Akira Takahashi
December 20, 2024
Tweet
Share
More Decks by Akira Takahashi
See All by Akira Takahashi
C++20の整数
faithandbrave
0
120
コンテナと文字列の中間インタフェースspanとstring_view
faithandbrave
1
400
C++23 スタックトレースライブラリ
faithandbrave
0
380
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
1.1k
使いたい標準C++機能がない環境でいかに実装・設計するか
faithandbrave
2
1k
C++20からC++23までの変化
faithandbrave
9
12k
オープン化が進むC++の現状と展望
faithandbrave
19
11k
C++20 status
faithandbrave
0
920
Other Decks in Technology
See All in Technology
Two Blades, One Journey: Engineering While Managing
ohbarye
4
1.6k
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
160
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
18k
MIMEと文字コードの闇
hirachan
2
1.4k
Snowflakeの開発・運用コストをApache Icebergで効率化しよう!~機能と活用例のご紹介~
sagara
1
390
内製化を加速させるlaC活用術
nrinetcom
PRO
2
130
2/18 Making Security Scale: メルカリが考えるセキュリティ戦略 - Coincheck x LayerX x Mercari
jsonf
0
110
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.9k
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
490
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
8
3.4k
Goで作って学ぶWebSocket
ryuichi1208
3
2.7k
OPENLOGI Company Profile
hr01
0
60k
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
A Modern Web Designer's Workflow
chriscoyier
693
190k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Designing for Performance
lara
604
68k
A Philosophy of Restraint
colly
203
16k
How STYLIGHT went responsive
nonsquared
98
5.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
GraphQLとの向き合い方2022年版
quramy
44
14k
Site-Speed That Sticks
csswizardry
4
400
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Transcript
C++26 エラー性動作 (erroneous behavior) 高橋 晶 (Akira Takahashi) faithandbrave@gmail.com Preferred
Networks, Inc. 2024/12/20 (金) C++ MIX #12
C++26 エラー性動作 • C++26から、環境によって発生する可能性のあるエラー動作と して、「エラー性動作 (erroneous behavior)」が追加された • これまであった未定義動作、未規定動作などと比較しながら 見ていこう
未定義動作 (undefined behavior; UB) • 特定の操作に対して、予期せぬ動作をする可能性がある • 範囲外アクセスやゼロ割など • クラッシュする可能性もあるし、しない可能性もある
• クラッシュしないとしても何が起こるかはわからない • プログラマは未定義動作がないコードを書かないといけない • UBSan (Undefined Behavior Sanitizer) ツールで検出できる
未規定動作 (unspecified behavior) • C++規格では動作を規定せず、処理系で規定する • 例外のエラーメッセージ、sizeof(long)、ラムダ式のオブジェ クトサイズなど • 処理系のよって異なる動作をするが、危険ではない
(クラッ シュはしない)
エラー性動作 (erroneous behavior) • 未定義動作を安全側に倒した動作 • クラッシュする可能性もあるし、しない可能性もある • クラッシュしない場合の動作が規定される •
C++26でエラー性動作に分類されるのは、 「未初期化値の読み取り」のみ
未初期化値の読み取り int f(int x) { // 処理が続行した場合… int y =
x; // エラー性動作ではない } int x; // エラー性の値 (erroneous value) をもつ f(x); // エラー性動作 (エラー性の値を読み取った) • エラー性動作が起こったあとは、エラー性の値とは見なされない • ただしunsigned char (とstd::byte) ではエラー性動作にはならない
不定値の使用を明示 int f(int x) {} int g(int x [[indeterminate]]) {
int y = x; // 未定義動作 } int x [[indeterminate]]; // 意図して不定値を使う f(x); // 未定義動作 g(x); // OK • 不定値として初期化すること、不定値を受け取ることを明示する属 性もいっしょに入る • 不定値の読み取りは、エラー性動作ではなく未定義動作になる
将来、エラー性動作に分類されるかもしれない操作 • 符号付き整数のオーバーフロー • 型変換をした結果、表現可能な範囲を超えた • ゼロ割 例として、ゼロ割はARM CPUではクラッシュせず値0が 出力されて処理が続行する
まとめ • エラー分類が今後変更されていくことで、 クラッシュしない場合の動作が規定されていく • それによってプログラムの安全性が高くなっていく • 「なにが起こるかわからない (未定義動作)」から 「クラッシュもしくは規定された処理続行
(エラー性動 作)」へ