2016-07-01から1ヶ月間の記事一覧

配列とポインタ

(結論) 配列はポインタではない。が、大半の場合で配列名はポインタにdecay(減衰)されるので、あたかも同じように(同じとは言っていない)使っても実生活に差し支えない。抑えるポイントは3つ。 配列の宣言は、配列として定義する。また、ポインタの宣言はポ…

Cにおけるlvalue(左辺値)、rvalue(右辺値)

注) C++のお話しではないです。C++は、ムーブセマンティクスとかの関係で色々複雑で説明大変なので、Modern Effective C++ のはじめに -> 用語と表記(p.xviii)とか、5章を頑張って読むのが一番近道です!*1結論)左辺にも右辺にもおける式はlvalue(左辺値)で…

コンパイル時階乗計算まとめ

まずは、関数テンプレートの明示的特殊化バージョンから。*1 template<int N> int factorial() { return factorial<N-1>() * N; } template<> int factorial<0>() { return 1; } int main(void) { cout << factorial<4>() << endl; return 0; } 関数テンプレートのコンパ</n-1></int>…

C++ Question

1. 暗黙の型変換について、どれくらい話題を知っているか? 単一の実引数コンストラクタ(explicitつけない)は、暗黙の型変換を引き起こす*1 Proxy Class*2 operator bool *3 戻り値型の推論*4 2. +=演算子と+演算子を自作クラスでどうオーバーロードするか?…

テンプレート引数が複数の場合

クラステンプレートは部分特殊化(partial specialization)できるが、関数テンプレートやメンバ関数テンプレートは部分特殊化できない。 テンプレート 多重定義 部分特殊化 明示的特殊化 クラステンプレート × ○ ○ 関数テンプレート ○ × ○ 部分特殊化よりも多…

Visitor pattern

Test Visitor pattern C++のためのAPIデザイン*1 12章を参照にした。 #include <iostream> #include <vector> #include <string> #include <memory> class ShapeNode; class TransformNode; class INodeVisitor { public: virtual ~INodeVisitor() {} virtual void Visit(ShapeNode& node) = 0;</memory></string></vector></iostream>…