Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.5k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
5.2k
株式会社リブセンス・転職会議 採用候補者様向け資料
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
AWSインフルエンサーへの道 / load of AWS Influencer
whisaiyo
0
170
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
17
7.2k
100以上の新規コネクタ提供を可能にしたアーキテクチャ
ooyukioo
0
150
Snowflakeで実践する、生成AIを活用した「自然言語によるデータとの対話」
nayuts
0
110
【ServiceNow SNUG Meetup LT deck】WorkFlow Editorの廃止と Flow Designerへの移行戦略
niwato
0
110
AWS re:Invent 2025 re:Cap LT大会 データベース好きが語る re:Invent 2025 データベースアップデート/セッションの紹介
coldairflow
0
120
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
980
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3.6k
Databricks向けJupyter Kernelでデータサイエンティストの開発環境をAI-Readyにする / Data+AI World Tour Tokyo After Party
genda
1
620
Agent Skillsがハーネスの垣根を超える日
gotalab555
3
1.8k
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
180
生成AI時代におけるグローバル戦略思考
taka_aki
0
210
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
7.8k
[SF Ruby Conf 2025] Rails X
palkan
0
550
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Building AI with AI
inesmontani
PRO
1
560
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
HDC tutorial
michielstock
0
260
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.7k
Building the Perfect Custom Keyboard
takai
1
660
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
130
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
370
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