25項 ポインタと数値型とにオーバロードするのは避けよう

25項 ポインタと数値型とにオーバロードするのは避けよう


ポインタと数値型にオーバロードを行うと、NULLを指定したときに予測できないふるまいをします。

void f(int i){...}
void f(char *p){...}

int main()
{
	f(NULL);

上のコードでf()を呼び出したとき、NULLが0と定義されているならf(int i)が呼び出され、NULLが(void*)0と定義されているならコンパイルエラーになります。
このふるまいは直感的ではないため、ポインタと数値型とにオーバロードするのは避けるべきです。