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
34
C++入門?
昔からC++ の入門書に違和感があったので、ちょっとそれについてまとめてみました
tsuda.a
April 05, 2014
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
マジカルインクリメントと指数表記
tsudaahr
0
160
バックアップしていますか?
tsudaahr
0
110
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
120
NPUわからん
tsudaahr
0
170
計算量オーダーの話
tsudaahr
1
370
クラウド初学者が抱える不安について
tsudaahr
0
240
キューとは何か
tsudaahr
0
210
等幅は死んだ(ぇ
tsudaahr
0
85
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
170
Other Decks in Programming
See All in Programming
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
520
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
500
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
220
RailsGirls IZUMO スポンサーLT
16bitidol
0
170
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
1.2k
GraphRAGの仕組みまるわかり
tosuri13
8
530
Select API from Kotlin Coroutine
jmatsu
1
230
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
2
630
Team operations that are not burdened by SRE
kazatohiei
1
300
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
910
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
270
Featured
See All Featured
Writing Fast Ruby
sferik
628
62k
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Making Projects Easy
brettharned
116
6.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Docker and Python
trallard
44
3.5k
Documentation Writing (for coders)
carmenintech
72
4.9k
Navigating Team Friction
lara
187
15k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.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