编译器是否认为调试模式下"this"不是nullptr?

qdi*_*dii 5 c++ compiler-construction assert this

我想知道是否放置assert( this != nullptr );每个成员函数都是个好主意.我相信编译器可以决定完全忽略这个断言,因为假设this不能为null,因此断言始终为true并且可以在编译时解析.

但是如果编译器没有做出这个假设,那么这个断言对于及早发现问题非常有用.

编译器会假设这个吗?

Luc*_*ore 9

不,编译器通常不会这样认为.甚至商业代码都会使用这些检查,有些不仅仅是断言,而是其中的逻辑.if (!this) { doSomeWork(); }.

虽然你无法到达的情况下thisNULL不运行到未定义的行为,如果你也知道的实施细则那么这是一个检查,你可以做; 是的,你是对的,它可以帮助调试.

我不会把它放在任何地方.在任何地方,就此而言.如果this确实如此NULL,当您访问某个成员时,您可能会在以后遇到崩溃.如果您没有访问任何成员,请考虑标记该方法static.它也不必要地膨胀代码.

  • 这太过分了 - 无论如何你都会在null解除引用时崩溃,所以断言失败并没有真正添加任何有用的东西. (2认同)