我想知道在每个成员函数上放置 assert( this != nullptr );
是否是个好主意。我相信编译器可以决定完全忽略这个断言,因为假设 this
不能为 null,所以断言总是 true 并且可以在编译时解决-时间。
但是如果编译器没有做出这个假设,那么这个断言对于及早发现问题非常有用。
编译器会这样假设吗?
最佳答案
不,编译器通常不会这样假设。这些检查甚至还有商业代码,其中一些不仅断言而且实际上是逻辑。 if (!this) { doSomeWork();
。
虽然您无法在不遇到未定义行为的情况下达到 this
为 NULL
的情况,但如果您充分了解实现细节,那么这就是一个检查你(们)能做到;是的,你是对的,它可以帮助调试。
不过我不会把它放在任何地方。就此而言,任何地方。如果 this
确实是 NULL
,您稍后在访问某个成员时可能会崩溃。如果您不访问任何成员,请考虑将方法标记为 static
。它还会不必要地使代码膨胀。
关于c++ - 编译器是否假定 "this"在 Debug模式下不是 nullptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21724951/