yohhoyの日記

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

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

What's SSO?

C++

C++文字列クラス(std::string)の文脈における略語 SSO についてメモ。Small String Optimizationの略。文字列クラスの内部実装において、小さな文字列に対しては動的メモリ確保を避けるような最適化手法のこと。実際にそのような最適化が行われているか否か…

C++11とBoost.ThreadのMutex/Lock比較表

C++11標準ライブラリで新たに追加された排他制御ライブラリ/標準ヘッダ<mutex>と、Boost.Threadライブラリ 1.49.0の比較一覧表。C++11とBoost.Threadライブラリでは、いくつかのLockable要件(requirements)*1を定義し、各種Mutex型およびLockオブジェクトを提供す</mutex>…

C++11正規表現ライブラリ

C++

C++11標準の正規表現ライブラリでは6種類の正規表現文法をサポートする。既定値はECMAScript(+一部変更)となっている。N3337 28.5.1/p1より引用。 The type syntax_option_type is an implementation-defined bitmask type (17.5.2.1.3). Setting its ele…

C++スレッド遅延開始の実装5パターン

本文こちら→C++スレッド遅延開始の実装5パターン - yohhoyの日記(別館)コード:https://gist.github.com/yohhoy/2421197

Effective C++11(の種)

C++

Scott Meyers氏によるEffective C++11ネタ集を見つけたのでInitial Thoughts on Effective C++11より抄訳。2014-03-23追記:本記事の内容はBook Report: New Title, New TOC, New Sample Itemにてアップデートされている。(2013-03-25 Effective C++11: Con…

(翻訳)C++11の非同期タスク:まだその域に達していない

C++

元記事:Async Tasks in C++11: Not Quite There Yet | Corensic, Bartosz Milewski氏, 2011/10/10自分自身の理解のために日本語訳を行ったC++11標準ライブラリstd::asyncとタスクベース並列に関する記事。 C++11の非同期タスク:まだその域に達していない …

C++トランザクショナルメモリ拡張まとめ(ドラフト仕様v1.1)

プログラミング言語C++のトランザクショナルメモリ(TM; Transactional Memory)拡張に関するざっくりまとめメモ。2013-10-05追記:本記事の内容はN3718にてアップデートされている。→id:yohhoy:20131005本記事の内容は、2012年4月現在の最新ドラフト仕様 “Dra…

(翻訳)C++トランザクシショナル言語構成要素のドラフト仕様 V1.1 [§1-2のみ]

元文書:Transactional Memory Specification Drafting Group, "Draft Specification of Transactional Language Constructs for C++"*1, Version 1.1, 2012/2/3訳出メモ: 次世代C++1y標準のトランザクショナルメモリに関するドラフト仕様を一部翻訳。[§1.…

sizeof演算子とオペランドの評価

C C++

プログラミング言語C/C++言語では、sizeof演算子のオペランドは評価されない(evaluated)。 int a = 42; size_t n = sizeof(++a); // 式(++a)は評価されない assert(a == 42); C++11 JTC1/SC22/WG21 N3337 5/p7, 5.3.3/p1より部分引用。 In some contexts, un…

Boost.Contextでファイバーライブラリを実装してみた

長いのでこちら→Boost.Contextでファイバーライブラリを実装してみた - yohhoyの日記(別館) ライブラリコード:https://gist.github.com/yohhoy/2318086 サンプルコード:https://gist.github.com/yohhoy/2342248

to_string関数

C++11標準ライブラリに新しく追加されたstd::to_string関数についてメモ*1。組み込み数値型(intやdouble)から文字列クラスstd::stringに変換する。変換処理はsprintf相当で行われる(書式指定文字列については後述)。 #include <string> auto s1 = std::to_string</string>…

C++11でのちょっとした言語仕様変更とSafe bool Idiom

C++

C++11言語仕様ではif/for/while/do-while構文における条件部(condition)の扱いが微妙に変更された。また、これに関連してC++標準ライブラリのインタフェースも一部変更されている。(→[id:yohhoy:20120406:p1]など)この仕様変更により、C++98/03における…

C++標準I/Oストリームと暗黙型変換の落とし穴

C++

C++標準ライブラリのI/Oストリームにある暗黙のユーザ定義変換(user-defined conversion)のせいで、プログラマが意図しない動作を引き起こすケースがある。 #include <iostream> int main() { std::cout << std::cin; // ?? } 上記コードは正常にコンパイル可能。gcc 4</iostream>…

(翻訳)良性データ競合は有害である

元記事:Benign Data Races Considered Harmful | Corensic, Bartosz Milewski氏, 2011/6/7自分自身の理解のために日本語訳を行ったC++11でのデータ競合に関する記事。(タイトルはいわゆる"〜 Considered Harmful"ネタ) 良性データ競合は有害である 最近、…

(翻訳)良性データ競合へのC++的対応

C++

元記事:Dealing with Benign Data Races the C++ Way | Corensic, Bartosz Milewski氏, 2011/5/9自分自身の理解のために日本語訳を行ったC++11のデータ競合に関する記事。 良性データ競合へのC++的対応 データ競合(data race)は未定義動作(undefined behavi…

定義済みマクロ__cplusplusとgccの長い歴史

C++言語の定義済みマクロ__cplusplusについてメモ。C++ソースコードとしてコンパイルされるときのみ定義され、C/C++言語共用ライブラリヘッダ等でよく利用される。 // C/C++共用ヘッダファイル #ifdef __cplusplus extern "C" { #endif // ここでの宣言はC言…