C++

C++ クイズの解説

先日、こんな投稿があり、C++ 界隈で話題だったようです。C++ quiz time! Without checking, what does this print (assume an LP64 / LLP64 system):short a = 1;std::cout << sizeof(+a)["23456"] << std::endl;— Richard Smith (@zygoloid) March 18, 201…

【C++】デストラクタが呼ばれる/呼ばれない

すごく久しぶりの記事更新になってしまいました。 デストラクタ備忘録です。 派生されるクラスのデストラクタは仮想関数にしなければならない 純粋仮想デストラクタには定義が必要 placement new により構築されたオブジェクトは明示的にデストラクタを呼び…

【C++】デフォルトコンストラクタを持たない型の配列を初期化する

class X { public: explicit X(int) {} }; 上のような、デフォルトコンストラクタのないクラスについて考えてみます。 このようなクラスのオブジェクトは、明示的にコンストラクタを呼ばなければ生成できません。 X x1; // NG X x2(99); // OK X xarray1[3];…

Visual C++(cl.exe)で UTF-8 のファイルをコンパイルする

日本語版 Windows では、デフォルトの文字コードとして Shift-JIS(CP932)が広く使われています。 この Shift-JIS、2バイト目が ASCII コードと同じ、という文字がいくつか存在します。例えば「ソ」の Shift-JIS でのコードは16進数で835cで、2バイト目の5c…

【C++】ラムダ式でメンバ変数をキャプチャする

C++

メモ。メンバ関数内でラムダ式を使う時、メンバ変数をキャプチャするにはthisをキャプチャする。 struct Hoge { int n; void f() { auto lambda = [this]() -> int { // this をキャプチャ return n * 2; // メンバ n を使う } std::cout << lambda() << std…

【C++】private コンストラクタに、メンバ関数から呼ばれた外部の関数からアクセスする

C++

かなり限定的ですが、タイトルのような状況にぶち当たったので。 コンストラクタを private にして、create() みたいな static メンバ関数を作ってオブジェクトを作成するというイディオムがあります。 class hoge { hoge() { } // private コンストラクタ p…

【C++11】スコープ付きenum

C++

通常のenumの列挙子は、その enum が定義されているスコープに属すため、同じスコープに列挙子と同じ名前の変数などがあると名前の衝突が起こります。*1 int White; enum Color { Black, White }; // エラー! White を再定義している 衝突を避けるために、 …

【C/C++】char型の話

せっかくブログを開設したので、なんか書いてみようと思います。 以前どっかで書いた内容と大体同じだけど。 char 型とは C/C++ で文字を表す整数型。文字"列"ではないことに注意が必要。