2013-01-01から1年間の記事一覧

std::make_shared から private コンストラクタを呼び出す

std::make_shared で private コンストラクタを呼ぶには,関数内クラスと継承を利用すれば良い. class hoge { hoge(); // private ctor public: static std::shared_ptr<hoge> create() { // return std::make_shared<hoge>(); // こう書きたいが,コンパイルエラー // </hoge></hoge>…

「 Copy して Swap 」 対 「 Copy して Move 代入」

例外安全なコピー代入演算子を定義しようとしたとき, C++11 では Copy して Swap する方法 Copy して Move 代入する方法 の二通りが存在するので,それぞれのメリットとデメリットを比べてみた. Copy して Swap 昨日の記事で説明した方法. struct Hoge { …

代入演算子のエレガントな定義方法と,その不満点

ユーザ定義されたクラスに対して 代入演算子を定義する場合, コンパイラの生成するデフォルトの代入演算子では,例外安全の強い保証を満たせない場合がある. struct Hoge { std::vector<int> x, y; Hoge() = default; Hoge(std::vector<int> x_, std::vector<int> y_) : x</int></int></int>…

C++11 時代のクラス設計に関する提案

先日,ついに C++11 の主要な機能を一通り実装した GCC-4.8.1 がリリースされた. もう一方の主要な C++ コンパイラである Clang++ でも C++11 の機能は既に全て実装されており, 来る 6/05 に最新版の Clang-3.3 がリリースされ, C++11 対応が完了する見通…

Jubatus の開発に加わりました

6月から無職を辞めて派遣社員になりました. 勤務する会社(派遣先)は,武蔵野にある NTT ソフトウェアイノベーションセンタで, 機械学習の分散処理フレームワーク Jubatus の開発チームの一員として働かせて頂きます. やる仕事は,当面は C++ の知識を…

GCC-4.8.1 がリリースされた

GCC の最新版, GCC-4.8.1 がリリースされました. http://gcc.gnu.org/ml/gcc/2013-05/msg00306.html http://gcc.gnu.org/gcc-4.8/ GCC-4.8.1 は, GCC-4.8.0 のバグフィックス版であり,多くのバグが潰されている他, 新たに rvalue references for *this …

C++14 のラムダ式 完全解説 中編

この記事では,前編に引き続き, C++14 のラムダ式について説明していく. 前編では,ラムダ式に対する大雑把な説明と,ラムダ式の持つ型推論機能を紹介した. この記事では,ラムダ式の最も重要な機能の一つである,変数のキャプチャについて説明したい. …

GCC-4.8.1 の Release Candidate が公開された

GCC の最新版, GCC-4.8.1 の Release Candidate が公開されました. http://gcc.gnu.org/ml/gcc/2013-05/msg00171.html http://gcc.gnu.org/ml/gcc/2013-05/msg00172.html ダウンロードは ftp://gcc.gnu.org/pub/gcc/snapshots/4.8.1-RC-20130517 から行え…

C++14 のラムダ式 完全解説 前編

C++14 の Committee Draft が公開された. C++14 は基本的には C++11 のマイナーバージョンアップであるが,バグフィックスのみを行っている訳ではなく, C++11 の時点で微妙に使いにくかった機能,特にラムダ式については,大きな機能追加が行われている. …

C++14 に追加された機能(の一部)に対する私的レビュー コア言語編

C++14に入ることが決まったものの一覧(みたいなもの) を読んで気になった C++14 での変更のうち,コア言語の中から気になったものを挙げてみる. ただし, 動的配列 多相ラムダ 変数テンプレート 等に関しては, http://cpplover.blogspot.jp/2013/04/bristo…

野良C++erの今更な退職エントリ,または私は如何にしてリモートの仕事を辞めて無職になったか

関連エントリ: http://d.hatena.ne.jp/gintenlabo/20130125/1359083832 http://d.hatena.ne.jp/gintenlabo/20130126/1359203652 Twitter で僕をフォローしてる人は知ってるかもしれませんが,4月から無職に戻りました. なにぶん突然の事だったので,冷静…

Restricted Implicit Cast

related to: http://d.hatena.ne.jp/gintenlabo/20130416/1366130964 以下のような C++ コードを考える: // http://ideone.com/s3I4n6 #include <iostream> int main() { auto x = 0; double const& ref = x; x = 23; std::cout << x << std::endl; std::cout << ref <</iostream>…

最近 Twitter 規制されることが多い

っていうか今 規制されたんですが. あーうー. 最近 Twitter やりすぎなので,何らかの形で自粛するべきではないかと思ってる. テンションを上げるにはそこそこ便利なので,全面禁止は無理だろうが. 連投制限のあるクライアントを (作る|利用する),とか…

暗黙変換の結果によって生まれた一時オブジェクトに気をつけて

次に示される関数 implicit_cast について考える. #include <type_traits> #include <utility> template<class To, class From, typename std::enable_if< std::is_convertible<From, To>::value >::type* = nullptr > To implicit_cast(From && x) { return std::forward<From>(x); } この関数は,引数として渡された値を,型 To に暗黙変換して返すものであり,例えば</from></class></utility></type_traits>…

make_shared で確保されたメモリ領域は,それを参照する weak_ptr が無くならない限り解放されない

std::make_shared は基本的には効率的だけど弱点もあるよ,って話. struct Huge { int data[1024][1024]; }; #include <memory> #include <vector> int main() { std::vector<std::weak_ptr<Huge>> vec; for( int i = 0; i < 100000; ++i ) { auto p = std::make_shared<Huge>(p); vec.push_back(p); p</huge></std::weak_ptr<huge></vector></memory>…

いい加減 僕は T t(x); と auto t = T(x); の違いを blog にまとめるべきかもしれない

と http://cpplover.blogspot.jp/2013/04/isexplicitlyconvertible.html のコメント書いてて思ったので,書く. まず些細な違いとして, auto は右辺の値の const や参照を消し飛ばす*1,という点が挙げられる. using T = int const; // Alias declarations…

多重定義された関数で C++11 の Perfect Forward を使ってはいけない

C++11で新たに加わった Perfect Forward は,非常に便利な機能である. template<class T> void f(T && x) { g(std::forward<T>(x)); // 別の関数 g に処理を丸投げする } しかしこれは,多重定義された関数で使われた場合,予期せぬ挙動を示すことがある. 例を見てみよ</t></class>…

git fetch --prune

Git

GitHub では ちょっと前から, pull request を merge したとき,その pull request を投げた topic branch (仮に origin/hoge とする)を Web 上の操作で簡単に削除できるようになってます (つまり git push origin :hoge を自動で実行してくれます). …

Jenkins with GitHub OAuth Plugin のセットアップ手順

仕事で Jenkins を使ったCI環境を立ち上げたので,メモがてら手順を書いておく. 環境は さくらのVPS, OS は Debian 6. 内容的には,セキュリティの設定が完了して実際にプロジェクトを立ち上げられるまで. Jenkins の導入 参考: https://wiki.jenkins-c…

リモート開発はじめます

http://d.hatena.ne.jp/gintenlabo/20130125/1359083832 で書いた通り,リモートで開発することになりました. 今日から. とはいえ,今日は会議に出ただけ,厳密にはまだリモート開発はしてません. プロジェクト的にも立ち上げたばかりで まだストーリーが…

blog のタイトルを変えてみました

理由はなんとなくです.

スタートアップに参加します. リモートで.

Aiming 辞めてました. 12月の半ば辺りに.(挨拶 理由はいくつかあるんですが,一番大きいのは 一人暮らしに限界を感じていたことで, 生活習慣とか滅茶苦茶だったし,住んでた部屋とかもまぁ色々と酷いことになってて,こりゃもう無理だろうと. 人間,…

2013年ですね.

あけましておめでとうございます. 今年もよろしくお願いいたします.