Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C++ FAQ #TechLunch
Search
Livesense Inc.
PRO
April 23, 2014
Technology
0
68
C++ FAQ #TechLunch
2012/01/25(水) @ Livesense TechLunch
発表者:桂 大介
Livesense Inc.
PRO
April 23, 2014
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
27新卒_総合職採用_会社説明資料
livesense
PRO
0
1.4k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
5.1k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
130
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1.6k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
510
26新卒_総合職採用_会社説明資料
livesense
PRO
0
12k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
47k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
13k
中途セールス職_会社説明資料
livesense
PRO
0
280
Other Decks in Technology
See All in Technology
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
140
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
6
1.5k
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
140
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
310
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
480
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
1.9k
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
1k
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
740
手動から自動へ、そしてその先へ
moritamasami
0
300
Kubernetes Multi-tenancy: Principles and Practices for Large Scale Internal Platforms
hhiroshell
0
120
因果AIへの招待
sshimizu2006
0
970
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
A designer walks into a library…
pauljervisheath
210
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Invisible Side of Design
smashingmag
302
51k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Bash Introduction
62gerente
615
210k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
For a Future-Friendly Web
brad_frost
180
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
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