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
150
バックアップしていますか?
tsudaahr
0
100
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
110
NPUわからん
tsudaahr
0
160
計算量オーダーの話
tsudaahr
1
370
クラウド初学者が抱える不安について
tsudaahr
0
230
キューとは何か
tsudaahr
0
210
等幅は死んだ(ぇ
tsudaahr
0
83
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
170
Other Decks in Programming
See All in Programming
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
110
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
200
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
6.2k
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
160
FastMCPでMCPサーバー/クライアントを構築してみる
ttnyt8701
2
130
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
890
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
370
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
140
Parallel::Pipesの紹介
skaji
2
900
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
510
PT AI без купюр
v0lka
0
220
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
We Have a Design System, Now What?
morganepeng
52
7.6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Site-Speed That Sticks
csswizardry
10
620
How STYLIGHT went responsive
nonsquared
100
5.6k
Side Projects
sachag
454
42k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
180
53k
Balancing Empowerment & Direction
lara
1
240
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
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