C++

基底クラスのデストラクタをvirtualにしなくてもメモリリークしない場合

C++

こんな感じのコードを目にしました。 #include <vector> struct Base { ~Base(){} // non-virtual virtual void doSomething() = 0; }; struct Derived1 : public Base { virtual void doSomething(){ ++x; } int x; }; struct Derived2 : public Base { virtual voi</vector>…

関数テンプレートのオーバーロードにはまる

C++

動作確認環境:VC20052008、VC2010、g++4.5 関数テンプレートの特殊化 任意の型のオブジェクトを出力する次のような関数テンプレートを書くことがありました。 元々が文字列だった場合だけ特別扱いしたい事情があって、テンプレートの特殊化をしています。 /…

const参照は一時変数にバインドできる

C++

const参照の関数パラメータに対してデフォルト引数を付けようとして、これってできるんだっけ? と引っかかりました。 例: void func(const std::vector<int>& param = std::vector<int>()); デフォルト引数となっているstd::vector()はrvalueに評価されるはずなので</int></int>…

Boostの依存ヘッダファイルを自動コピー…できなかった

最近Boostを使い始めたところです。インクルードするだけで使えるライブラリって導入らくちんですね。とはいっても、Boostはかなり規模が大きいので、全部コピーしてきてリポジトリにつっこむのはちょっと嫌です。Boostの中でどのライブラリを使っているかは…

イテレータのループを書くときのスタイル

C++

しょうもないちゃあしょうもない話なんですけど、C++でイテレータのループを書くときに、ループの初期化と終了条件を書く行が長くなりがちなので、改行のスタイルをどうするかよく悩みます。 ※ループの中でvectorに変化ない場合、終了条件を毎回end()を呼び…

呼出規約をアセンブリコードで確認

C++

Windowsプログラミングで関数に付けるWINAPIとかAPIENTRYとかのキーワード、いったい何なのかと調べると呼出規約というやつで、関数呼び出し時の引数の渡し方やスタックの掃除のしかたがこれによって変わるらしい。 言葉の説明だけ見ても実感がわかないので…

C++で数値のフォーマット方法まとめ

C++

C++で数値→文字列や文字列→数値の変換をするとき、様々な方法があってよく分からなくなることがあるので、知っている範囲でまとめてみました。 Javaだったらだいたい「DecimalFormat使っとけ」で一発なんだけどなあ。 注意点 基本的に文字列をcharで扱う関数…

ポインタ型へのdynamic_castが失敗したときはNULLが返る

C++

Javaからの類推で、キャストの失敗は例外が飛ぶのかなーと思っていたんですが、ポインタのdynamic_cast失敗はNULLが返ってくるだけでした。MSDNリファレンス The value of a failed cast to pointer type is the null pointer. A failed cast to reference t…

関数オブジェクトは奥が深い

C++

はじめての関数オブジェクト体験。 動かん あるvectorの要素で、他のvector中にも入っているやつを取り除こうとして次のようなコードを書いたらコンパイルエラーになりました。 #include <iostream> #include <vector> #include <algorithm> #include <functional> bool contains(const std::vector<int> v,</int></functional></algorithm></vector></iostream>…

コンパイラが生成したデフォルトコンストラクタでは組み込み型メンバは初期化されない

C++

C++がJavaと違っていてはまりがちなところ。「C++ Programming Language Special Edition」10.4.2節 (p.243) に次のように書いてあります。 A compiler-generated default construcor implicitly calls the default constructors for a class' members of cl…

メモリ再確保は遅い

C++

最近メインで使う言語がJavaからC++に変わったので、C++を書く練習に、PKU JudgeOnline(Project Eulerがもっと大規模になったみたいなの)をやってます。JavaとC++って、構文上の見た目はそれなりに似ているものの、その底流にある考え方はずいぶん異なって…

はやく一人前になりたい

C++

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者: スコット・メイヤーズ,小林健一郎出版社/メーカー: ピアソン・エデュケーション発売日: 2006/04/29メディア: 大型本購入: 29人 クリック: 411回この商品を含むブログ (186件) …