C++

効率的な文字列連結

3つ以上の文字列を何気なく + 演算子で連結すると、必ずしも効率的には動作しないコードになります。 std::string a = "Hello"; const char b[] = "World"; char c = '!'; std::string x = "\n" "<message>" + a + ',' + b + c + "</message>"; 実際は、std::basic_string の実…

C++で構造体の名前付き初期化

C言語のライブラリを使っていると、構造体をデフォルト初期化してから、一部のメンバー変数だけ書き換えて利用することがしばしばあります。 option o = {}; o.name = "hello"; o.size = 1234; func(o); option 構造体のメンバー変数の仕様は一部だけが決ま…

ループ変数を回すだけのFORマクロ

普段、配列と std::vector ばかり使うので、BOOST_FOREACH よりも、単純にループ変数を回すコードが簡単に書ける方が嬉しい。 for (int i = 0, n = v.size(); i < n; ++i) { ... } FOR_INDEX (int i, v) { ... } そのためのマクロを書いてみた。 #include <cstddef> #</cstddef>…

メンバ変数の強調表示をしよう。

半年くらい前に、ふとテキストエディタの強調機能を使って、C++のメンバ変数に色を付けてみたら、これがとても良かったのでおすすめする。数10行あるメンバ関数のコードを表示したときでも、その中で扱っているメンバ変数が、ぱっと一瞬で把握できる。それが…

C++はどこ行くの。

C++

A Brief Look at C++0xを読んで、今頃ながらC++0xのことを知った。C++0xはいまのC++の改良版ということなので、言語のコンセプトは変わらないようで、ほっとした。いままでもこれからも "general-purpose programming language with a bias towards systems …

テンプレートはDuck Typing

C++

C++は静的型言語。仮想関数とかRTTIとか使うと少し動的型っぽくなる。それとは逆に、すべてを静的に扱うテンプレート機能を使うと、なぜかかなり動的型言語に近いコーディングが可能になる。ふしぎなC++。

可変個数引数マクロの作り方

C++

GCCのプリプロセッサの便利な拡張を知ったのでメモ。関数形式マクロの引数の数は固定、というのはよく知られていると思うけど、現在のC言語(C99)ではサポートされている。 // (1) #define DEBUG_PRINT(...) printf(__VA_ARGS__)C++の仕様には入っていない…