【发布时间】:2013-07-21 13:21:19
【问题描述】:
我想知道 assert( this != nullptr ); 在成员函数中是否是一个好主意,有人指出如果 this 的值添加了偏移量,它就行不通了。在这种情况下,它不是 0,而是 40,这使得断言毫无用处。
什么时候会发生这种情况?
【问题讨论】:
-
在空指针上调用函数不是未定义的行为吗?
-
如果
this是通过索引对象数组而派生的,其中数组基础指针为空。 -
@jogojapan well
assert()其实是用来调试bug的:) -
@qdii 我明白你在说什么。但是 undefined behavior 意味着当您在代码中进行这样的调用时,没有定义会发生什么。特别是,不能保证永远到达
assert的点。相关:stackoverflow.com/questions/2474018/… -
优化编译器倾向于在不发生未定义行为的假设下进行优化。取消引用空指针显然是未定义的行为,因此
assert(this != NULL);可以完全优化。