Skip to content

Instantly share code, notes, and snippets.

@hapo31
Last active August 29, 2015 14:02
Show Gist options
  • Save hapo31/e5775db2d39e3121eb31 to your computer and use it in GitHub Desktop.
Save hapo31/e5775db2d39e3121eb31 to your computer and use it in GitHub Desktop.
読者の方々はC++という言語をご存知だろうか。C言語を学習していく中で、一度ぐらいは耳にしたことがあるはずだ。
C++は名前の通りC言語に様々な機能を追加した言語である。
故に、C言語で覚えた知識はC++でも使うことが出来、C言語を学習し終わった者が次に手を出しやすい言語といえるであろう。
とは言えC++を使う以上、新しく増えた機能を使わなければ宝の持ち腐れである。ここではC言語の次にC++を学ぼうと思っている人、
もしくは、C言語をひと通り学び終わり次に何を勉強すればいいのか分からない人へC++をオススメするという名目で、
軽く言語機能を紹介しようと思う。
さて、C++と言えばオブジェクト指向プログラミングやメタプログラミング、コンパイル時実行プログラミングであるが、
それらはここで取り上げるのは少々複雑なため、手始めということで簡単な機能から紹介したいと思う。
C++は、一般的にはC言語より難しいと言われることが多いが、中には書く量が減ったことでC言語より便利になった機能も存在する。
C言語でのコメントアウトは/*と*/で囲うことで行うことが出来るが、これは1行のみをコメントアウトしたいときは少々面倒である。
C++では//(ダブルスラッシュ)で単一行コメントアウトが出来る。
コメントアウトの効果はその行の終わりまでである。
ちなみに、Visual Studioでは範囲選択をした後Ctrl+K Ctrl+Cと入力すると範囲内をコメントアウトすることが出来るショートカットが存在する。非常に便利なのでお試しあれ。
次に、for文の初期化文で変数の宣言が出来るようになった。
C言語でのfor文は事前にint i;などと変数を宣言しておく必要があったが、C++では
for(int i = 0;i < 10; ++i) printf("hello\n");
このように、初期化位置で変数を宣言することが出来るのである。変数のスコープは、そのfor文の中のみになる。
次は、C++の機能の中でもとても便利な機能を紹介しよう。
それは「右辺値から変数の型を決めてくれる」というもので、一般的には型推論と呼ばれる機能である。
型推論を行うにはautoという識別子を使用する。
例:
auto i = 10; // iはint型
auto j = 1.5; // jはdouble型
auto k = 1.0f; // kはfloat型
auto r = sin( M_PI / 2 ); // rはdouble型
このような具合に、右辺値から変数の型をコンパイラが自動で識別してくれる。
かと言って乱用してよいものではないので、この例のような状況ならちゃんと型名を書くべきである。
(変数宣言には「何をするための変数か」を、ソースコードを読む人に伝えるためという役割もあるため)
この機能の真価は、templateだとかiteratorだとかを使うときに発揮される。興味が湧いたらこのワードで調べて見て欲しい。
なお、この機能はC++11というC++の新しいバージョンのものであり、Visual Studioでは2010から使うことが出来る。
つまり、これを読んでいる人のほぼ全員がこの機能を試すことが出来るということである。とてもありがたいね。
さて、というわけで大変軽くかつ簡単ではあるが3つほどC++の機能を紹介させていただいた。
これだけでも、C++はC言語のかゆいところに手が届くような言語であることが分かると思う。
(まあ余計なことを敢えて言えば手が届くどころか手が皮膚の中に潜り込んで死n
これを読んで少しでも興味が湧いた人がいれば、ぜひともGoogle先生に質問してみることをおすすめする。
確かにC言語より習得は難しいものになるが、使いこなせばより複雑なプログラムをC言語よりも分かりやすく書けるようになるので、
C言語がいまいち物足りないような人にはうってつけであると私は思う。挑戦してみて欲しい。
ちなみに、冒頭の絵は私の自作絵である。C++ブラザーズと呼んでくれたら嬉しい。
質問意見等はコメント欄にして頂ければ、分かる範囲で対応したいと思う。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment