使用案例:
class B { int b; public: int getB() { return b; } }; class A { B *b; public: int getB() { if (b ) { //How can I avoid the null check for b here return b->getB(); } } }
Michael.. 8
如果B在getB()中为null,那么您期望发生什么?如果它不是程序的有效状态,只需断言(b!= NULL).如果它是有效状态,则需要检查.
有些语言支持合同,因此您不需要手动编写检查代码,但遗憾的是C++没有.
如果B在getB()中为null,那么您期望发生什么?如果它不是程序的有效状态,只需断言(b!= NULL).如果它是有效状态,则需要检查.
有些语言支持合同,因此您不需要手动编写检查代码,但遗憾的是C++没有.
解决方案1:尽可能使用引用.
解决方案2:只需执行空指针检查,让编译器处理它们.如今,删除冗余空指针检查是标准的优化.除了大部分冗余之外,它们并不能捕获所有冗余.