C++標準化委員会の文書: P0009R3-P0099R1
P0009R3: P0009r3 : Polymorphic Multidimensional Array Reference
連続したストレージを多次元配列に見せかけるラッパーライブラリの提案。
柔軟に対応できるようにした結果、すごく使いづらいように思える。
P0019R3: P0019r3 : Atomic View
非アトミックオブジェクトに対してアトミック操作ができるatomic_viewの追加。
// 従来のコード
int data = 0 ;
atomic_view atomic_data( data ) ;
++atomic_data ;
従来のコードをatomic<T>に置き換えるのが現実的ではない場合に使える。
P0020R3: P0020r3 : Floating Point Atomic
atomicライブラリを浮動小数点数に対応させる提案。
P0022R2: Proxy Iterators for the Ranges Extensions
vector<bool>は1ビット単位で要素を格納している。イテレーターは実リファレンスではなくプロクシークラスを返す。イテレーターは実リファレンスを返すことを要件付けられているので、vector<bool>のイテレーターは真のイテレーターではなく、したがってvector<bool>も真のコンテナーではない。
実リファレンスではなくプロクシークラスを使う際の問題は、スワップ操作にあるので、iter_swapをカスタマイゼーションポイントに変えてしまえば解決できる。また、ムーブのためのカスタマイゼーションポイントとして、iter_moveを追加する。
P0037R3: Fixed-Point Real Numbers
固定少数点数、fixed_pointの提案
#include <fixed_point>
int main()
{
fixed_point< std::uint64_t, 10 > f( 1 ), sum( 0 ) ;
// tick = 0.0001
auto tick = f / 10000 ;
// 0.0001を1万回足す
for ( unsigned i = 0 ; i != 10000 ; ++i )
sum += tick ;
// 結果は1
std::cout << static_cast<unsigned>( sum ) << '\n' ;
}
fixed_point< Rep, Exponent >という形で、Repは内部で使用する整数型、Exponentは小数点以下の2進数桁を指定する。
P0040R2: Extending memory management tools
未初期化の生のストレージ上にオブジェクトを構築したりオブジェクトを破棄するための関数テンプレートの追加。トリビアルなデストラクターであればデストラクターを呼ぶ処理をしないなどの最適化が行われる。
[PDF] P0051R2: C++ generic overload function
関数オブジェクトを登録して、登録した関数オブジェクトの間でオーバーロード解決をしてくれるoverloadライブラリの提案。
auto f = overload(
[]( int i ) { },
[]( double d ) { },
[]( std::string s ) { }
) ;
f( 0 ) ;
f( 0.0 ) ;
using std::literals ;
f( "hello"s ) ;
実装はとても簡単。
[PDF] P0057R6: Wording for Coroutines
コルーチンの文面案
キーワードがco_return, co_yeild, co_awaitなのが残念だ。
[PDF] P0059R2: Add rings to the Standard Library
ringバッファーライブラリの提案。前回と違い、ring_spanという名前になった。ring_spanは連続したストレージを受け取り、その上にリングバッファー構造を構築するラッパーライブラリだ。
[PDF] P0098R1:Towards Implementation and Use of memory order consume
タイトル通り、memory_order_consumeの実装と応用の話。もともとは、Linus TorvaldsがC/C++のatomicの仕様にケチをつけたところから始まる。Linuxカーネルでも使えるような実用的なアトミック操作を規格化するために、Linuxカーネルのメモリモデルやアトミック操作の応用を学ぶ文書が多数出た。
[PDF] P0099R1:A low-level API for stackful context switching
レジスターやスタックなどの実行環境ごと保存、リストアするスタックフルコンテキストスイッチを実現するための低レベルなライブラリの提案。
ドワンゴ広告
ドワンゴは本物のC++プログラマーを募集しています。
CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0