Most people will agree that C++ is a fairly complex language. But just how complex is it? I got curious about quantifying that by comparing the number of concepts a programmer has to understand to learn a programming language in its entirety. Concepts in my definition include large categories like classes and operators, as well as more fine grained things like if-else statements and while loops. T
C++11メモリモデルと、atomic変数relaxedメモリ操作で起こりえる "Thin-air read" への対策について。 注意:本記事は内容を理解して書いたわけでなく、関連情報の単なるメモ。 "Thin-air read"(または "out-of-thin-air value")は定式化されたメモリモデルで起こりえる、存在しない値*1のreadを許容する動作。(後述N3132のサンプルコードが分かり易い) C++11メモリモデルやJavaメモリモデルでは共に "Thin-air read" を禁止している。Javaでは複雑なメモリモデル定義によって対処し、C++11では(Javaに比べて)単純なメモリモデル定義+禁止条項の追加にて対処している。 (PDF)N3132 Mathematizing C++ Concurrency: The Post-Rapperswil Modelよ
C++11のstd::swapは、だいぶ大きく変更された。C++03までのswapは、<algorithm>にあり、CopyConstructibleかつAssignable(C++11のCopyAssignableに相当)を要求した。ところが、C++11では、<utility>に移されたあげく、MoveConstructibleかつMoveAssignableを要求するようになった。まるっきり別物になってしまっているのだ。果たして問題を起こさないものだろうか。おぼつかないものだ。 実装例は以下のようになる。 // C++03のswap template < typename T > void swap( T & a, T & b ) { T temp = a ; a = b ; b = temp ; } // C++11のswap template < typename T > void
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く