2016-11-01から1ヶ月間の記事一覧
Java 7で導入されたtry-with-resources構文とLockインタフェースの関係について。Java標準ライブラリのロック処理ではAutoCloseableインタフェースを利用しないため、try-with-resources構文を利用した「変数スコープにもとづくロック獲得・解放処理(Scoped…
C++11で導入されたリスト初期化(list initialization)構文で用いられるstd::initializer_list<E>では、要素型Eにコピー操作を要求するため*1、std::unique_ptrなどのコピー不可/ムーブのみ可能な(Move-only)型を扱えない。この制限により Move-only 型の標準コ</e>…
C++標準ライブラリが提供するstd::mutexほか同期プリミティブ型*1は、意図的にコピー/ムーブ操作を禁止している。本記事の内容はStack Overflowで見つけた質問と回答に基づく。 #include <mutex> class X { int data_ = 0; std::mutex mtx_; using Lock = std::loc</mutex>…
プログラミング言語C++でのスカラ変数の初期化/代入において、Uniform initializationと冗長な末尾カンマ(,)を組み合せた例。構文上は許容されるが、分かりにくい書き方は避けるべき。 int a = { 42, }; // OK: 値42で初期化 int b = { 42 }; // OK: (同上)…
Microsoft社による独自拡張言語 C++/CLI*1 と C++/CX*2 の差分について。主に言語機能の観点での差分リスト。MSDNフォーラムでのDeon Brewis氏*3回答による。引用中の/clrは C++/CLI に、/ZWは C++/CX に対応する(いずれもVisual C++のコンパイラオプション…
C標準ライブラリが提供するstrncpy関数の仕様について。有限長バッファへ文字列を切り詰めてコピーする処理では、strncpy関数が用いられるケースが多い。strncpy関数の仕様として「コピー元srcの文字列長が指定長BUFSIZE以上のとき、コピー先dest末尾にはNUL…
Rust標準ライブラリのコメントより。整数型*1に対してBig Endianへの変換メソッドto_beが提供される。その他にもEndianness変換メソッドto_le, from_be, from_leが提供される。 pub fn to_be(self) -> Self { // or not to be? if cfg!(target_endian = "big…