2008-12 << 2009-01 >> 2009-02

2009-01-24 (土)

*関数のオーバーロードとchar

charはunsigned char,signed charのどちらとも区別して扱われるんですね….符号の有無はコンパイラ依存なのでそうするのが妥当かもしれませんが,unsigned charとsigned charとcharの関数のうちひとつを実装し忘れたりすると,intの関数が呼ばれたりして危険です.

さらに,構造体とかも渡すので統一して参照渡しをしてたのですが,constな参照渡しって値渡しになることがあるんですね….charな変数でconst int &な関数を呼ぶことが出来ると思ってなかったので,気づくのに時間がかかりました.

参照渡しのつもりだったのに,試しに変数のアドレスを見たら別物になっているし….アドレスの値で変数の同一性を判定するようなコードはconstな参照渡しでは書けないということかな?(良く考えたら,一時オブジェクトが作られているだけだ…)

2008-12 << 2009-01 >> 2009-02