C++と色々

主にC++やプログラムに関する記事を投稿します。

C++

POD型とnon-POD型

2012/3/19追記 この記事の情報はC++03のものです。C++11ではPOD型の定義が異なっています。POD(Plain Old Data)型とはコンストラクタがコンパイラが自動生成したデフォルトコンストラクタしか持たいない型のことです。int型やdouble型などの組み込み型、ま…

純粋仮想関数にも実装を書くことが出来た

C++

Effective C++読んでて初めて知った。今まで知らなかった…orz メモしておこう。 #include <iostream> using std::cout; using std::endl; class Base { public: virtual void Func() = 0; virtual ~Base() {} }; void Base::Func() { cout << "Base Func" << endl; } c</iostream>…

Type Erasure Any編

C++

本の例題がboost::anyの簡易実装だったので、見ながら書いてみたやつ貼り。 #include <iostream> #include <typeinfo> using std::cout; using std::endl; class Any { public: //デフォルトコンストラクタ Any(); //テンプレートコンストラクタ template<class Type> Any(const Type& value)</class></typeinfo></iostream>…

型特性メタ関数(おまけ)

C++

前回の記事の続き。やっぱりboost使ってない版も書いてみた #include <iostream> using std::cout; using std::endl; //基底クラス:ガンダム class Gundam { }; //ガンダム派生クラス:エクシア class Exia : public Gundam { }; //ガンダム派生クラス:ゴッド class </iostream>…

型特性メタ関数

C++

例のテンプレート本(下記の参考文献参照)のSFINAEの章の勉強がてら、あるクラスが特定の基底クラスの派生クラスかどうか判定するプログラム書いてみた。 今回の場合はGundamクラスを派生してるかどうかチェックするプログラム #include <iostream> #include <boost/utility.hpp> using n</boost/utility.hpp></iostream>…

配列のポインタ渡しと参照渡し

C++

C++テンプレートテクニックやっていたらSFINAEの章のサンプルコードに template<class T, size_t N> T* begin(T (&ar)[N]) { return ar; } という記述があった。これはなんだろう?と思ってググったこちらにまとめてあった。</class>

右辺値参照とムーブセマンティクス

C++

こちらを見るとよくわかります本当は怖くないムーブセマンティクス - yohhoyの日記(別館) 本の虫: rvalue reference 完全解説

テンポラリオブジェクトの寿命

C++

自分がテンポラリオブジェクトの寿命と参照、右辺値参照をちゃんと理解していないため色々試してみる。 値を代入する場合、右辺値と関数の戻り値ではデストラクトされるタイミングが違うみたい? #include <iostream> using namespace std; void Section(int n) { cout </iostream>…

静的ポリモーフィズムとタグ・ディスパッチ

C++

折角なのでプログラミングの記事を書いてみようと思う。ポリモーフィズムについて。ざっくり言うと、同名の関数や型が所属しているクラスによって振る舞いを変化させること。 継承によって実現できる。 #include <iostream> class Parent { public: virtual void Show(</iostream>…

ソースコード貼るテスト

C++

約5ヶ月ぶりの更新 ソースコードを貼るテスト<pre>タグで貼ってみる #include #include using namespace std;int main() { function f = [](int i){ return i * i; }; cout return 0; } >||と||<で貼ってみる #include <iostream> #include <functional> using namespace std; int main(</functional></iostream></pre>…