yohhoyの日記

技術的メモをしていきたい日記

2012-12-01から1ヶ月間の記事一覧

2012年コンテンツアクセス頻度

2012/01/01〜2012/03/31 static変数初期化とスレッドセーフ - yohhoyの日記 (翻訳)C/C++のStrict Aliasingを理解する または - どうして#$@##@^%コンパイラは僕がしたい事をさせてくれないの! - yohhoyの日記 windows.hのmin/maxマクロ回避策4パターン -…

Boost.Thread 1.52.0 condition_variableメモリ浪費問題

Boost.Threadライブラリ 1.52.0の条件変数boost::condition_variableバグ修正(#7461)でのリグレッションにより、condition_variableオブジェクトでの反復的な待機/通知処理を行うとメモリリークが発生する。WindowsシステムかつBoost 1.52.0のみ影響を受…

boolalphaマニピュレータ

C++

C++標準ライブラリが提供するstd::boolalphaマニピュレータ(manipulator)と、独自ロケール(locale)/ファセット(facet)を用いた出力文字列の差し替え。ファセットstd::numpunct<charT>のdo_truename, do_falsename仮想メンバ関数をオーバーライドして、bool値をスト</chart>…

fputcとputc

C

C標準ライブラリでは、1文字ストリーム出力関数 fputc と putc(char版)、fputwc と putwc(wchar_t版)の2種類が提供される。両関数は機能的に等価。マクロ展開によるトラブル回避のためputc/putwc利用は避け、常にfputc/fputwcを用いること。 putc()は…

SCOPE_EXIT疑似構文の作り方

C++

C++ and Beyond 2012 "Systematic Error Handling in C++"スライド「ScopeGuard11」より。マクロとラムダ式を組合せてスコープガード文を疑似的に実現している。(注意:末尾のセミコロン必須) { ... SCOPE_EXIT { /* 処理A */ }; ... { ... SCOPE_EXIT { /…

本当は怖くないムーブセマンティクス

C++

長いのでこちら→本当は怖くないムーブセマンティクス - yohhoyの日記(別館)C++ Advent Calendar 2012参加記事。

__COUNTER__マクロ

C/C++プリプロセッサにおいて、一意な識別子名生成に利用できる__COUNTER__マクロについて。非標準機能だが主要コンパイラで一通りサポートされている。 #define CAT_IMPL(s1, s2) s1##s2 #define CAT(s1, s2) CAT_IMPL(s1, s2) #ifdef __COUNTER__ #define …

static_assert+標準メタ関数

C++

C++11 static_assert条件部の定数式(constant expression)にて、標準ライブラリ提供のメタ関数を利用するときのメモ。2017-11-10追記:一部のメタ関数で意図しないコンパイルエラーを引き起こすため、このイディオムを使うべきでない。C++1z(C++17)標準ライ…

copy elision抑止オプション

gcc(g++)において、C++言語仕様で許容されているcopy elision*1を明示的に抑止するオプション。 -fno-elide-constructors The C++ standard allows an implementation to omit creating a temporary that is only used to initialize another object of the …

#pragma detect_mismatch

Microsoft Visual C++ 2010(MSVC10)以降では、リンカでの不一致検知を行うdetect_mismatchプラグマが提供される。一例として、オブジェクト間のABI(Application Binary Interface)非互換検出に利用できる。関連URL c++ - Inline namespace emulation for MSV…