パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

C++11

日頃から仕事で C++ を使っているにもかかわらず、今頃勉強しているこの体たらく… 世の中はすでに C++14 だそうな…

といっても、難しい概念のものは、使いこなせるはずもなく、以前よりちょっと便利になった、というところ辺りから実際に導入していく感じだ。Boost もなかなか身につかず、そのうちどんどんバージョンが上がって、それをインストールしていくのが面倒で避けがちなので、標準で入っている、というのがありがたい。

それはさておき、早速導入しつつあるのが、auto。基本、イテレータを書くのが面倒なので使うレベルだが、実は結構奥の深いようだ。戻り値の後置(これって読みは「こうち」でいいのかな)と絡めると色々あるようだが、追々。

auto に、const を付けることもできるようだ。ただ、auto がポインタ型の時、const auto は、〜* const になるとか。const auto* を使った方がいいとか、なんかちょっと闇。

イテレータに使うのもちょっとコツがあって、auto で const_iterator にするには、cbegin()、cend() を使わないといけないそうな。知らない人が見たら「なんだ cend とは? send の仲間か?」みたいな、この無理矢理拡張した感が C++ だなぁ。

unique_ptr, shared_ptr は、生ポインタを表に出さずにメモリ管理するために必須かな。生ポインタは追放すべし、とは言っても、オープンなライブラリで必要になったりする事も…

range-based for は、これまでマクロで書いてたのが、標準で短く書けるのが便利な感じ。VC++2012 で、Intellisense がおかしくなったりするけど…

後は、override とか nullptr とか、バグの発生を軽減するためのキーワードはできるだけ使っていったほうがいい感じ。

すげぇ使いたいのに、なかなか使いこなせてないのがラムダ式の無名関数。クロージャ化もできたりかなり多機能だが、色々な書き方を覚えないといけなくて難しい。なんか表記法が記号だらけで Perl ぽいような。Javascript 的にわかりやすく書けるといいのだが。ここでも auto を使って関数オブジェクトを変数に入れてみたりもできるようだ。関数オブジェクトを返す関数オブジェクトとかも作れる、のかな? 面白い。

個人的には、クロージャというか、関数外の変数にアクセスできるのが、かなり可能性を広げている気がしたり。Pascal みたいに、外側のスコープは内側のスコープから見える、とか。いちいち引数でガチガチ受け渡さなくてもいいのがありがたそう。

という感じで、いまいちプログラミングは苦手な小生だが、少しでも効率的にコーディングできるよう日々精進することにする。しかし、直感的でなく機械的に覚えることが多いなぁ。