yohhoyの日記

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

2015-02-01から1ヶ月間の記事一覧

.NET−Javaブリッジライブラリ

.NETクラスとJavaクラス間の相互運用を可能にするライブラリ。MITライセンス(本体)+GPLv3(ツール)。 http://jni4net.com/ https://github.com/jni4net/jni4net .NET CLRとJVMを同一プロセス内で動作させ、.NETクラスからProxyクラス経由でのJavaクラス…

const値型へのユーザ定義変換演算子と引数lvalue/rvalueオーバーロードの落とし穴

C++11以降では、ユーザ定義変換演算子(user-defined conversion operator)の戻り値型をconst Tよりも非constなTとしたほうが良い。関数オーバーロードで引数型const T&およびT&&を受ける関数*1へ渡す際に、同関数呼び出し時のオーバーロード解決失敗によるコ…

forward_listはsizeメンバ関数を持たない

C++

C++11標準ライブラリで新しく追加されたstd::forward_listシーケンスコンテナは、要素数を返すsizeメンバ関数を提供しない。(空判定のemptyメンバ関数は提供される。) #include <forward_list> std::forward_list<int> fl = /*...*/; size_t n = fl.size(); // NG: ill-formed</int></forward_list>…

文字列リテラルは変更できないlvalue

C C++

C/C++言語では、文字列リテラル(string literal)は lvalue に分類される。ただし文字列リテラルの変更は未定義動作(undefined behavior)を引き起こす。文字列リテラル以外のリテラルは rvalue(prvalue) に分類される。(通常の)文字列リテラル型は、C++では…

std::listのsplice操作とallocator

C++

C++標準シーケンスコンテナstd::listが提供するsplice操作では、両コンテナのアロケータが等しくなければならない。 #include <list> std::list<int> list1 = { 1, 2, 3 }; std::list<int> list2 = { 4, 5, 6 }; std::list<int, SomeAllocator> list3 = { 42 }; list1.splice(list1.end(), list2)</int,></int></int></list>…