C++
C++では空の構造体を作ることができます。こんな風に。 struct _EMPTY {}; これは特になにかをしているわけではありません。単純にメンバを持たない構造体なだけです。 果たしてこの構造体のサイズはいくつでしょうか? struct _EMPTY {}; _tprintf(_T("size…
タイトルからするとなにを言っているのか分からないかもしれませんが、newの見栄えをJavaやC#と同じようにする方法です。 例えばJavaやC#でHogeというクラスをnewするときは以下のように書きます。 Hoge hoge = new Hoge(); 普通にC++でnewするときは以下の…
メンバ関数と静的メンバ関数を持つ簡単なクラスを作る class Hoge { public: void Print1() { _tprintf(_T("Print1\n")); } static void Print2() { _tprintf(_T("Print2\n")); }; }; これまで静的メンバ関数を呼ぶにはスコープ演算子を用いて呼ぶものだと思…
ある関数を呼ぶときに、その関数の中で一度だけ初期化する関数を呼びたい、そんなときにどうするかというお話です。 static bool initialize() { _tprintf(_T("initialize\n")); return true; } static void func() { // funcを呼び出したときにinitializeを…
ヘッダーファイルだけで関数を定義したいときがありますが、定義の仕方によってはリンクエラーになるので、そのときの挙動についてまとめました。 extern(外部リンゲージ) 各ソースファイルに関数が定義されるので、同じ関数が複数のファイルに存在するこ…
デフォルト引数は関数の引数にあらかじめ定義された値を入れておくことで、関数を呼ぶときに明示的に値を入れない場合はその値が使われるようになります。 static void Print(int n = 3 /* デフォルト引数 */) { printf("%d\n", n); } // 引数を明示的に指定…
関数に修正を加えたい場合に、なるべくプログラムに変更を加えないようにするためにデフォルト引数を加える場合があります。そうすれば今すでに動いているプログラムはデフォルト引数を受け取って動くことになるからです。 しかし、場合によっては影響を与え…
※開発環境はVC2010です。 C++では関数のオーバーロードは関数名が同じで引数が異なることが条件です。そのため同じ関数名で戻り値の型だけが違う関数を作るとエラーになってしまいます。 static int GetPi() { return 3; } static double GetPi() { return 3…
普通のnewと、placement newがどのくらい速度が違うのかを比較してみました。 #include "stdafx.h" #include <new> #include "TIME.H" class MyClass { public: MyClass() : m_value(0), m_dbl(0.0) { } MyClass(int value) : m_value(value), m_dbl(0.0) { } pub</new>…