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
0
35
C++入門?
昔からC++ の入門書に違和感があったので、ちょっとそれについてまとめてみました
tsuda.a
April 05, 2014
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
230
バックアップしていますか?
tsudaahr
0
140
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
140
NPUわからん
tsudaahr
0
190
計算量オーダーの話
tsudaahr
1
420
クラウド初学者が抱える不安について
tsudaahr
0
300
キューとは何か
tsudaahr
0
260
等幅は死んだ(ぇ
tsudaahr
0
120
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
200
Other Decks in Programming
See All in Programming
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
330
Fundamentals of Software Engineering In the Age of AI
therealdanvega
1
240
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
270
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
380
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
250
受け入れテスト駆動開発(ATDD)×AI駆動開発 AI時代のATDDの取り組み方を考える
kztakasaki
2
550
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
110
AI活用のコスパを最大化する方法
ochtum
0
130
「抽象に依存せよ」が分からなかった新卒1年目の私が Goのインターフェースと和解するまで
kurogenki
0
100
Unity6.3 AudioUpdate
cova8bitdots
0
120
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
82
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
670
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
sira's awesome portfolio website redesign presentation
elsirapls
0
190
Everyday Curiosity
cassininazir
0
160
Docker and Python
trallard
47
3.8k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
53k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Being A Developer After 40
akosma
91
590k
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