Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C++ FAQ #TechLunch
Search
Livesense Inc.
PRO
April 23, 2014
Technology
85
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C++ FAQ #TechLunch
2012/01/25(水) @ Livesense TechLunch
発表者:桂 大介
Livesense Inc.
PRO
April 23, 2014
More Decks by Livesense Inc.
See All by Livesense Inc.
Rubyはただの⾔語に⾮ず
livesense
PRO
0
520
28新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
120
27新卒_総合職採用_会社説明資料
livesense
PRO
0
7.1k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
12k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
540
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
1
1.8k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
680
26新卒_総合職採用_会社説明資料
livesense
PRO
0
13k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
74k
Other Decks in Technology
See All in Technology
人間はどの意思決定を手放せるのか
kawasima
14
6.9k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
16k
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
110
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
260
Minecraft JavaのMODをSwiftで作る
1mash0
0
160
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
1.9k
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
3k
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
200
CLIライブラリ開発を支える技術
htnabe
0
110
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
1
340
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.5k
Everyday Curiosity
cassininazir
0
320
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Scaling GitHub
holman
464
140k
Visualization
eitanlees
152
17k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
Transcript
C++ FAQ
[email protected]
ポインタとは何か • (1)メモリ内で型指定されたオブジェクトを識別す るために使用される値(アドレス)。 • (2)そのような値を保持する変数。
リファレンス(参照)とは何か • (1)型指定された値のメモリ内での位置を示す 値 • (2)そうした値を保持する変数 • int& m =
n; • 結合変えはできない
なぜ違う型のポインタは代入出来ないか • int*とchar*は両方ともアドレス値であるのに代 入時にエラーになるのはなぜか • サイズが違うときに他の領域への上書きが起 こってしまうから。int = doubleはキャストが起こ るため可能だが、*int
= *doubleは不可。 • ただし reinterpret_cast を使用すれば可能。
メモリレイアウトはどうなっているのか • コード用のコードストレージ(テキストストレージ) • グローバル変数用の静的ストレージ • 関数の引数とローカル変数のためのスタック。 動的領域に比べて速い。 • 動的その1。new/deleteで操作するフリースト
ア。 • 動的その2。malloc/freeで操作するヒープ。
new演算子とは何か • フリーストアからメモリを確保し、コンストラクタ の呼び出しによってオブジェクトを作成し、その ポインタ(T*)を返す。 • 複数のオブジェクト(配列)を作成した場合は、最 初のオブジェクトへのポインタを返す。
delete演算子とは何か • delete演算子はnew演算子によって割り当てら れたメモリをフリーストアに返す。 • 解放済みのポインタに対してのdelete(double free)はエラーになる。 • nullポインタはdouble freeしても害はない。
• どちらにせよアプリケーション終了時にはOSに 全て返される。
newとdeleteにおける注意点 • new演算子はコンストラクタの中だけで使用し、 delete演算子はデストラクタの中だけで使用す ると良い
nullポインタとは何か • ポインタに代入される0の値 • C言語だと(void*)0だが、C++では0 • 実装として「アドレスが0」である必要はない • オーバーロードがbuggy
void* とは何か • コンパイラが型を知らないメモリへのポインタ • 型を知らないコード間でアドレスをやりとりした いときに使用 • コールバック関数のアドレス引数や、最も低いレ ベルのメモリ割り当て(new演算子の実装)など
• C++ではvoid*からT*への暗黙的な変換は無効
C++11のnullptrとは何か • nullポインタを指定するためにのみ予約された 新たなキーワード • あらゆるポインタ型との比較・代入ができる
static_castとは何か • void*から特定の型へのキャストを行う • void* n = new int(1); •
int* m = static_cast<int*>(n)
reinterpret_castとは何か • intとdouble*など関連のない型の間での変換を 可能にする • int a = 3; •
double* b = new double(4.4); • a = reinterpret_cast<int>(b);
const_castとは何か • constをキャストによって取り去る • const int* n = new int(5);
• int* m = const_cast<int*>(n); • ++*m;
スマートポインタとは何か • deleteを呼ばなくてもスコープから外れたら削除 してくれるようにするオブジェクトポインタのラッ パー • 標準のstd::auto_ptr • boostのboost::shared_ptr (参照カウント)
• C++11からはshared_ptrがstdに
ジェネリックプログラミングとは何か • テンプレートを使用すること • 引数として表されるさまざまな型に対応するコー ドを記述すること。ただし、それらの引数型が特 定の構文上および意味的な要件を満たすこと が前提となる。 • パラメータポリモルフィズム(OOPのはアドホック
ポリモルフィズム)
ジェネリックとオブジェクト指向の対比 • ジェネリックプログラミングはテンプレートによっ てサポートされ、コンパイル時の決定に依存す る • オブジェクト指向プログラミングはクラス階層と 仮想関数によってサポートされ、実行時の決定 に依存する
クラスとは • オブジェクトの表現と、それらのオブジェクトで許 可される操作を定義するための型
クラスはどこから来たか • Simula
private継承とは何か • class Foo : private BaseFoo • 基底クラスのすべてのメソッドはprivateになる •
型変換は行われない • is-implemented-in-terms-of関係 • 実装継承 • 殆どの場合、コンポジションを使うべき
virtual function(仮想関数)とは何か • オーバーライドされ得る関数 • SimulaのINSPECT文(instanceof)をStroustrup はわざとC++に導入しなかった
関数ポインタとは何か • 関数のエントリポイント(アドレス値)を保持した 変数 • 受け渡しが可能
関数オブジェクトとは何か • ()演算子をオーバーロードしたオブジェクト • 関数みたいに呼び出せる • ファンクタ(functor)とも言う
多重継承(MI) • 「多重継承をRelease2.0に加えたことは間違い だった(もっと優先すべきがあった)」 Stroustrup • 「多重継承は脱出用パラシュートである。ふだん は要らないが必要なときには不可欠だ」 Booch •
「どのくらすがどのくらすのきのうをりようしてい るのかわかりにくくなる」 Matz
例外処理の目標 • リターンの仕組みの一種ではなくて、障害許容 システムの構築をサポートするための仕組みで ある。 • すべての関数を障害許容にするものではなく、 個々の関数に充実したエラー処理の機能を装 備させていない場合でも、サブシステムに良質 な障害許容性を与える仕組みである。
• たった一つの"正しい"エラー処理へアプリケー ションの設計者を縛り付けるのではなく、言葉を より表現力豊かにするための仕組みである。
例外はthrow地点から再開出来るべきか pros • 再開は終了を含んでいる(より一般的) • リソース不足のときなどに有用 cons • 終了の方がシンプル •
ライブラリとユーザーの密結合を招く
STLとは何か • Standard Template Library • アレクサンドル・ステパノフが作成 • Templateを使ったコンテナ・イテレータ・アルゴ リズムの集合
• vectorとかlistとかsetとかmapとか
boostとは何か • モダンなライブラリ • C++11に多数採用される • lambda, regex, shared_ptr, foreachなど
• 変わった所ではtribool, optional, anyなど
次回は? C++11 FAQ