【发布时间】:2011-11-07 00:47:28
【问题描述】:
我想检查某些东西是否为空,例如:
string xxx(const NotMyClass& obj) {
if (obj == NULL) {
//...
}
}
但是编译器对此抱怨:== 有 5 种可能的重载。
所以我尝试了这个:
if (obj == static_cast<NotMyClass>(NULL)) {
这会崩溃,因为 NotMyClass 的 == 重载无法处理空值。
编辑:每个人都告诉我它不能为 NULL,我肯定会在我的调试器中得到一些 NULL 的东西:
【问题讨论】:
-
obj 是引用,而不是指针。您无法将其与 NULL 进行比较。
-
C++ 不是 C 或 Java。这里的答案很好,但你也可以从阅读 C++ 中的指针和引用中受益。
-
我非常怀疑你会因为那个条件而“崩溃”。
-
@Tomalak 在我的调试器中,我看到它试图在该引用上执行 obj.something() 。它确实会崩溃。
-
检查这种情况唯一明智的做法是
if(&obj==NULL),但无论如何它都没有意义,因为如果你得到一个“NULL参考”,这意味着您的应用程序中存在逻辑错误(您已经取消引用NULL指针来创建此类引用,因此您已经处于未定义行为的境地)。正因为如此,编译器也可以优化掉这样的检查,因为它知道NULL引用不存在(因为 routinely does forNULL检查已经被取消引用的指针)。
标签: c++ operator-overloading reference