e4284.cpp

参照型でNULLを扱おうとするな

/* 警告:   B:e4284: 不正なNULL参照です */

修正前 void x(int& x) { if(&x == NULL) /* ←規格上正しくありません */ { puts("&x is NULL"); } } void y() { x(*(int*)NULL); /* ←参照型にNULLを渡そうとしては駄目 */ }
修正後 void x(int* x) { if(x == NULL) { puts("x is NULL"); } } void y() { x(NULL); }

解説 実際には動いてしまうコンパイラもありますが、 参照体にNULLの実体を渡す事は規格上許されないため、移植性の低下や思わぬ誤動作を招くかもしれません。 NULLを扱う可能性がある場合、参照型では無くポインタを使ってください。