加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:42:45 所属栏目:百科 来源:网络整理
导读:对我不正当的术语道歉. 如果条目不存在,我有一段代码返回NULL指针: ObjectType * MyClass::FindObjectType( const char * objectTypeName ){ if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() ) { Msg( "n[C++ ERROR] No object type: %
对我不正当的术语道歉.

如果条目不存在,我有一段代码返回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 objectn";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读