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
1.1k
C++26 エラー性動作
Akira Takahashi
December 20, 2024
Tweet
Share
More Decks by Akira Takahashi
See All by Akira Takahashi
P2P通信の標準化 WebRTCを知ろう
faithandbrave
6
2.6k
C++20 射影変換
faithandbrave
0
650
C++26アップデート 2025-03
faithandbrave
0
1.7k
C++20の整数
faithandbrave
0
230
コンテナと文字列の中間インタフェースspanとstring_view
faithandbrave
1
570
C++23 スタックトレースライブラリ
faithandbrave
0
530
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
1.3k
使いたい標準C++機能がない環境でいかに実装・設計するか
faithandbrave
2
1.2k
C++20からC++23までの変化
faithandbrave
9
12k
Other Decks in Technology
See All in Technology
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
380
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
180
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
12
4.8k
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
190
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
460
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
470
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
280
Language Update: Java
skrb
2
300
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
170
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
We Have a Design System, Now What?
morganepeng
53
7.8k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Being A Developer After 40
akosma
90
590k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Transcript
C++26 エラー性動作 (erroneous behavior) 高橋 晶 (Akira Takahashi)
[email protected]
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が 出力されて処理が続行する
まとめ • エラー分類が今後変更されていくことで、 クラッシュしない場合の動作が規定されていく • それによってプログラムの安全性が高くなっていく • 「なにが起こるかわからない (未定義動作)」から 「クラッシュもしくは規定された処理続行
(エラー性動 作)」へ