mar*_*hon 1 c++ reference operator-overloading
我想检查一下是否为null,例如:
string xxx(const NotMyClass& obj) {
if (obj == NULL) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨这个:有5个可能的重载==.
所以我尝试了这个:
if (obj == static_cast<NotMyClass>(NULL)) {
Run Code Online (Sandbox Code Playgroud)
这是因为崩溃NotMyClass的==超载不处理空值.
编辑:对于每个人都告诉我它不能为NULL,我肯定会在我的调试器中得到一些NULL:

在格式良好的C++程序中,引用永远不会NULL(更准确地说,您可能永远不会引用对象的地址NULL).
所以不仅答案是"不,没有办法",一个必然结果是"这毫无意义".
关于C的陈述也没有意义,因为C没有引用.
至于Java,它的"引用"在很多方面更像是C++指针,包括这一点.
比较不同语言之间的这种特定行为是一件愚蠢的事情.
如果您需要这个"可选对象"行为,那么您正在寻找指针:
std::string xxx(const NotMyClass* ptr) {
if (ptr == NULL)
throw SomeException();
const NotMyClass& ref = *ptr;
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
但考虑一下你是否真的需要这个; boost::optional如果你真的这样做,那么一个不错的选择
你问的是没有意义的.C++中的引用永远不会是"空",因为它们只能通过别名现有对象来创建,并且它们不能被反弹.一旦引用x,总是引用x.
(如果原始对象的生命周期在引用的生命周期之前结束,则引用可能变为"悬空",但这是编程错误而不是可检查的运行时条件.)