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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/c/110486.html

猜你在找的C&C++相关文章