c++ - 编译器是否假定 "this"在 Debug模式下不是 nullptr?

标签 c++ compiler-construction this assert

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

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

编译器会这样假设吗?

最佳答案

不,编译器通常不会这样假设。这些检查甚至还有商业代码,其中一些不仅断言而且实际上是逻辑。 if (!this) { doSomeWork();

虽然您无法在不遇到未定义行为的情况下达到 thisNULL 的情况,但如果您充分了解实现细节,那么这就是一个检查你(们)能做到;是的,你是对的,它可以帮助调试。

不过我不会把它放在任何地方。就此而言,任何地方。如果 this 确实是 NULL,您稍后在访问某个成员时可能会崩溃。如果您不访问任何成员,请考虑将方法标记为 static。它还会不必要地使代码膨胀。

关于c++ - 编译器是否假定 "this"在 Debug模式下不是 nullptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21724951/

相关文章:

c++ - Netbeans 和存储库

c++ - 在 omnet++ IDE 中找不到 -lC :\SQLAPI\lib\sqlapi. 库

apache - 使用 LLVM Plus 自定义 channel 和自定义库编译 Apache Server

Javascript `this` 没有像我想象的那样工作?

c++ - C++ 中 decltype(this) 的类型是什么?

c++ - Opencv - 从特征匹配中获取像素坐标

c++ - 使用 opencv 和 LUT 减少颜色深度

Java 5.0 编译器 API?

c++ - 如何欺骗编译器优化内存读取?

c++ - 在构造函数中引用此指针