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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tsuda.a
April 05, 2014
Programming
37
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
95
マジカルインクリメントと指数表記
tsudaahr
0
250
バックアップしていますか?
tsudaahr
0
150
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
160
NPUわからん
tsudaahr
0
210
計算量オーダーの話
tsudaahr
1
460
クラウド初学者が抱える不安について
tsudaahr
0
330
キューとは何か
tsudaahr
0
280
等幅は死んだ(ぇ
tsudaahr
0
130
Other Decks in Programming
See All in Programming
Webフレームワークの ベンチマークについて
yusukebe
0
130
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
440
The NotImplementedError Problem in Ruby
koic
1
600
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
460
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
230
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
150
Oxcを導入して開発体験が向上した話
yug1224
4
290
関係性から理解する"同一性"の型用語たち
pvcresin
2
640
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
380
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
350
Designing for humans not robots
tammielis
254
26k
It's Worth the Effort
3n
188
29k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Code Review Best Practice
trishagee
74
20k
Speed Design
sergeychernyshev
33
1.8k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
320
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
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