p512〜p538まで

お次は静的メンバについて。あと、そのほかもいけるところまでやっとくか。

静的メンバ変数

知らなかったこと、よく間違えることをつらつらと

・実体定義を行うほうにはstaticをつけない。(よく間違う)
・デフォルト引数に指定可能
・必ず0で初期化される。(普通の静的変数と同じ)
・ローカルでない静的変数はmain関数が実行される前に初期化される
・静的変数はmain関数が終了したあとにデストラクタが呼ばれる。
・静的メンバ変数は派生クラスでも同じメモリ領域を使う。

静的メンバ関数

・実体を使ってhoge.Fuga();みたいなのは紛らわしいのでやめたほうがいい。
・静的メンバの挙動がわからなくなったらクラスの実体の受け渡しを意識すべし。

なんかメンバ定数とかあったけど、そこらへんは大丈夫だったぽ。

一時オブジェクト

・string("hoge")と(string)"hoge"は等価。ただし、引数が1つの場合限定。(つかわねー。)
・string str = string("hoge");って書いても一時オブジェクトが生成されないときもある。逆も然り。
・throw exception();って書いても上と同様最適化される場合もあればされない場合もある。
・void Hoge(const int& a);として、Hoge(10);とした場合、実引数を参照するための変数として、一時オブジェクトが作られる。

なんか今まで文章でだらだら書いてきたけど、箇条書きのほうがまとまっていいね。次から演算子オーバーロードでちょうどきりがいいので、ここで休憩。晩飯とめちゃイケに備える。