
今までC言語(それも AINSI C)をよく仕事で使っています。
最近、実はC++もちょっと使えることを知ったので、なんちゃってではなくもう少し勉強しようかなと思っています。
ちなみにバージョンはやっぱり古くてC++98程度の機能しか使えない環境なのでモダンとはまったく言えません...
それでもC言語を使ってからC++を試してみると、とんでもない進化を感じます。
スポンサーリンク
C++はArduinoでほんの少し触れていましたが、ほぼC言語として使っていました。
クラスはライブラリを使ったり作ったりするときくらいで、自分でもほとんど使いません。
ArduinoではStringクラスが用意されているのでstd::stringを使いませんし、なぜか配列ばかり使っていてvectorやlistを使っている事例をあまり見かけません。
ArduinoではC++11が使えるのでautoの型推論だっていけます。
ラムダ式はまれに見るかなあ...いうくらいイメージです。
そんな適当なイメージのC++を使うので、期待だけは膨らんでいます。
まあC++03なのでたくさんの機能が使えるわけではありませんが...
クラスはもちろんのこと関数のオーバーロードや関数テンプレートも便利ですよね。
あとはstringやvectorなどの標準ライブラリがあるだけでも便利さが段違いなんですよ...
ポインタや動的がメモリ確保少なくなるだけでも、苦労が減ります。
試しにC言語で作ったソースコードを修正しながらC++を使ってみると、C言語の資産であまりいじれないところもあってキャストが目立ちます。
特にconst_castですね、const修飾子を無理やり外すやつです。
スポンサーリンク
文字列リテラルを直接記述している引数の型がchar*なのでconst_cast<char*>ばかり書いています。
あとはreinterpret_castもよく出てきてしまいます。
char*をint*として扱ってほしい場合ときなどに使っています。
まあCスタイルのキャストでもいいと思いますが、一応こっちを使ったほうが明示的でいい気がします。
関数のオーバーロードはかなり便利で、今まで似たような関数をいくつも作っていたのが同じ関数名でも作れるのでスッキリします。
デフォルト引数も使えばもっとスッキリしていい感じです。
とりあえずいろんなプログラムを書きつつ学習中です。
今はチャットAIもそこそこ優秀でインターネット検索で知識を得るのと同じくらいAIが使えます。
しれっと嘘をつくときもありますが、散らばっている知識をサクッとまとめてくれる学習ツールとしては優秀なのかなと思っていますのでおすすめです。
スポンサーリンク
Leave a Comment