yohhoyの日記

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

2013-01-01から1年間の記事一覧

ラムダ式から呼び出し規約指定つき関数ポインタへ

Microsoft Visual C++コンパイラにおける、C++ラムダ式から関数ポインタへの変換と関数呼び出し規約(calling convention)*1の扱いについてメモ。MSVC11以降では変数キャプチャを伴わないラムダ式(stateless lambda)を、任意の呼び出し規約をもつ関数ポインタ…

アクセス制御とメンバ変数メモリレイアウト

C++

プログラミング言語C++が定義する POD(plain old data)型 において、該当POD型のメンバ変数がメモリ上にどのような順序で配置されるか(メモリレイアウト)と、メンバのアクセス制御(public/privateなど)の関係についてメモ。まとめ:*1 POD型の各メンバ変数…

代入演算子のdefault指定とconstメンバ

C++

C++11で導入された “関数への明示的default指定” に関するメモ。あるクラスがconstメンバ変数を含むとき、代入演算子(operator=)をdefault指定したときの振る舞いについて。要約: コンストラクタ/代入演算子などへdefault指定(=default)は、必ずしも “実装…

Cストリーム入出力関数とスレッド安全性

C標準ライブラリの<stdio.h>ヘッダで提供されるストリーム入出力関数において、複数スレッドから同時に対象ストリーム入出力操作を行ったときの振る舞い(スレッド安全性)に関するメモ。まとめ: C99以前:POSIX準拠システムならばスレッド安全である。(それ以外は処</stdio.h>…

ミューテックスのロック状態を取得

C++

C++11標準ライブラリ提供の ミューテックス および ロックオブジェクト とロック状態の取得について。std::mutexなどのミューテックス型は、自スレッドでロック獲得済みかを問合せるインタフェースを提供しない。代わりにstd::unique_lockクラステンプレート…

std::functionの戻り値型に関する制約条件

C++

C++11標準ライブラリ提供のstd::functionクラステンプレートにおいて、同functionオブジェクトで保持する呼び出し可能オブジェクト(callable object)の戻り値型に関するメモ。2015-09-27追記:この制限は次期標準規格C++1z(C++17)にて修正される。id:yohhoy:…

std::unique_ptrと添字アクセス

C++

C++11標準ライブラリ提供のstd::unique_ptrクラステンプレートでは、第1テンプレート引数に配列型T[]を指定したときのみ添字アクセス([]演算子)を利用可能となる。ただし、この部分特殊化では*演算子と->演算子は提供されない。 #include <memory> { std::unique_p</memory>…