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++入門?
Search
tsuda.a
April 05, 2014
Programming
43
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C++入門?
昔からC++ の入門書に違和感があったので、ちょっとそれについてまとめてみました
tsuda.a
April 05, 2014
More Decks by tsuda.a
See All by tsuda.a
Git を GUI で使う話
tsudaahr
0
130
マジカルインクリメントと指数表記
tsudaahr
0
280
バックアップしていますか?
tsudaahr
0
160
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
170
NPUわからん
tsudaahr
0
230
計算量オーダーの話
tsudaahr
1
480
クラウド初学者が抱える不安について
tsudaahr
0
470
キューとは何か
tsudaahr
0
300
等幅は死んだ(ぇ
tsudaahr
0
150
Other Decks in Programming
See All in Programming
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
210
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
400
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
140
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
350
Press start. Python's next generation.
willingc
PRO
3
300
自分的「カンファレンスの楽しみ方」
syumai
0
190
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
260
Oxlintはいいぞ(続)
yug1224
1
540
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
470
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
Flow は今どうなっているか
mizdra
PRO
0
900
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Product Roadmaps are Hard
iamctodd
55
13k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
810
Side Projects
sachag
455
43k
Transcript
C++入門? LTDD広島#2 2014/4/5 @tsuda_ahr
自己紹介
昔から C++ の入門書に違和感があったので、 ちょっとそれについてまとめてみました。
注意! これから話す内容は個人的な感想であって、 正確性とか妥当性とかは一切検証していません。
CのHello World #include <stdio.h> int main(void) { printf("Hello, world!"); return
0; } 出典 http://ja.wikipedia.org/wiki/Hello worldプログラムの一覧 hello_1.c
実行 動く。
C++のHello World #include <iostream> int main() { std::cout << "Hello,
world!" << std::endl; } // return がないのはいいのか?・・・ 出典 http://ja.wikipedia.org/wiki/Hello worldプログラムの一覧 hello_2.cpp
は?
なにこれ?
なんでこんなに違うわけ? わけわかんない!
とりあえず実行 まあ、動く。
Cのコードだとダメなわけ? #include <stdio.h> int main(void) { printf("Hello, world!"); return 0;
} 出典 http://ja.wikipedia.org/wiki/Hello worldプログラムの一覧 hello_3.cpp
CのコードをC++でコンパイルして実行! 動くやん!
なぜだ! なぜ C と同じコードじゃないんだ?
調べた C++ では新しい入出力機能 が存在していますから、 それを使うのが C++らしい 書き方です。 ということらしいです。 出典 http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/cpp/language/001.html
なにが C++ らしいのか? #include <iostream> int main() { std::cout <<
"Hello, world!" << std::endl; } Iostreamライブラリ “.h“ がついてない 名前空間 標準出力ストリーム グローバルオブジェクト 出力演算子 行を終了し、バッファを フラッシュするオブジェクト? なんかもりだくさん。 実はオーバーロード
ところで
<<
出力演算子って何? 出典 ストラウストラップのプログラミング入門
<< って言ったら C 的には 左シフト じゃないの?
演算子オーバーロード << を演算子オーバーロードし、 << を実行すると、左シフトではなく、 別の処理を実行するようにしている。 # cout の場合は標準出力へ出力する。 要するに
C++ では演算子がどのような演算を するかをプログラムで指定する仕組みがあり、 それで演算子の動作を変えている。
盛りだくさんです。 おなかいっぱい。
Hello World ごときで こんなに盛るなよ(汗
ところで C++ で C でいう以下のコード場合どう書けば いいんすか? #include <stdio.h> int main(void)
{ printf("%7.2f %02x", 12.3, 10); return 0; }
調べた でも大丈夫です。 C++ は C と互換性があるのでコード内で cout と printf をごちゃ混ぜに
しても良いのです。 簡単な出力やデバッグには cout 、 計算結果など小数のフォーマットをそろえたい ときは printf と使い分ければ 問題ありません。 出典 http://www.flow.cs.is.nagoya-u.ac.jp/hamada/programming/cpp2.html
None
じゃあ最初から printf でいいじゃねーかよ(汗 そのほうがひとつですむじゃん(汗 cout いらねーじゃん(汗
まとめ 言語の力を誇示するのはやめましょう。 具体的には、 ・無用なクラス/関数を作ったり ・無駄に演算子オーバーロードを使ったり すると ・可読性を落とすだけで利点なし という結果に堕ちる場合があるので注意します。
特に! << を演算子を、本来の左シフトからまったく 意味が異なる機能に差し替えるなどは、百害 あって一利なし。(個人的見解) 演算子オーバーロードを使用するときには、元 の演算子の機能を踏まえたうえで実装するよう 注意しましょう。 (通常のオーバーロードやオーバーライドする ときも同様ですが)
ご清聴ありがとうございました
参考1) cout による書式設定 別に cout が書式設定できないわけではないよ うです。 出典 http://msdn.microsoft.com/ja-jp/library/420970az.aspx #include
<iostream> #include <iomanip> using namespace std; int main() { cout << setiosflags(ios::fixed); cout << setw(7); cout << setprecision(2); cout << 12.3; cout << " "; cout.fill('0'); cout << setw(2); cout << hex; cout << 10; }
参考2) もっとも美しきクソコード (個人的見解) void strcpy (char *s, char *t) {
while (*s++ = *t++) ; } 出典 プログラミング言語C