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"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |