C/C++

配列終端と STL アルゴリズム

STL アルゴリズムで配列を扱うときに、その終端をうまく扱う方法を紹介しておく。 // 配列の終端を扱うためのテンプレート関数 template <typename T, size_t N> T* end_of(T (&array)[N]) { return array + N; }// 利用例 char buf[YOUR_DEFINITION]; const char *p = std::find(b</typename>…

暗号学的に安全な乱数生成 -- Windows 2000 用

ついカッとなって書いた。検証はしていない。 #include <Wincrypt.h> #include <Tchar.h> #pragma comment(lib, "advapi32") /* RtlGenRandom による乱数生成に成功したら 0、 そうでなければ 1 を返す */ static DWORD secure_rand_xp(INT *value) { HMODULE module = LoadLibrar</tchar.h></wincrypt.h>…

評価順序

i = 0; f(i++, i++); が f(0, 1); と書かれたものを見て、ヘイヘイ!とおもったのでエントリー。関数引数の評価順序は実装依存。 f(i++, i++) は、その関数呼び出しが行われる直前で f(0, 1) か f(1, 0) かが決定しているけれど、どちらになるかは規格は定め…

複数のキャストが存在するクラスの operator<< があいまいで解決できないという話

とあるクラスに int と double のキャストオペレーターが定義されている。このためユニットテストフレームワークが生成する operatorコンパイルできず困る、という話を伝え聞いた。そんなときは operatorオーバーロードを定義すればいいんじゃない? #includ…

Microsoft "Secure Template Overloads"

http://msdn.microsoft.com/en-us/library/ms175759(VS.80).aspxマクロが三つあって、結局のところそれぞれどれがどうなるんだ?というのがようやっと腑に落ちた。規定で有効になっている _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES は、追加された _s 系関数に…