微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 非指针等于NULL的是什么?

对我不正当的术语道歉.

如果条目不存在,我有一段代码返回NULL指针:

ObjectType * MyClass::FindobjectType( const char * objectTypeName )
{
    if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() )
    {
        Msg( "\n[C++ ERROR] No object type: %s",objectTypeName );
        return NULL;
    }
    else
        return &objectTypeMap[ objectTypeName ];
}

我想做同样的事情,但这次返回一个对象,而不只是一个指针.以下代码不会给我任何编译器错误(这让我感到惊讶):

ObjectType MyClass::FindobjectType( const char * objectTypeName )
{
    if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() )
    {
        Msg( "\n[C++ ERROR] No object type: %s",objectTypeName );
    }
    else
        return objectTypeMap[ objectTypeName ];
}

用指针我可以检查是否没有找到这样的条目:

if ( FindobjectType( objectType ) == NULL )
    //Do something

如何对待返回的对象执行等效检查?

解决方法

对象没有语言层面的等价物.

一个选项是创建一个“哨兵”对象,保证与任何“真实”对象的不平等进行比较,并返回:

class ObjectType {
public:
    static const ObjectType null;

    bool operator==(const ObjectType &rhs) const { /* need an appropriate comparison test */ }

    ...
};

ObjectType ObjectType::null(/* something unique */);


...

ObjectType foo(const char *objectTypeName) {
    if (cond) {
        return objectTypeMap[objectTypeName];
    } else {
        return ObjectType::null;
    }
}


...

if (foo(objectType) == ObjectType::null) {
    std::cout << "Returned the null object\n";
}

原文地址:https://www.jb51.cc/c/110486.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐