|
#defineマクロはコンパイル前に展開されるので、
自分で展開したコードを書いてデバッグしてみると分かります。
getLen()関数を以下のように書き換えてデバッグします。
int getLen(std::string *strArray)
{
int ret = ARRAY_LEN(strArray);
int ret2 = sizeof(strArray);
int ret3 = sizeof(strArray[0]);
return ret;
}
ret2 の値は4, ret3の値は28であることが分かります。
(Win32, Unicodeの場合)
これでピンときますか?
ちょっと考えてみてください。
つまり、getLen()関数に渡した時点で、
std::string arr[2]
は
std::string* arr
に型が変わっちゃうんです。
どちらでも、strArray, strArray[0]を値としてみたときは変わりませんが、
型は変わっちゃうんです。
なので、sizeof(strArray) はポインタ変数のサイズである4を返してくるんです。
getLen()の戻り値は 4 / 28 で 0 になります。
|