返回“NULL””如果找不到搜索结果,则为对象
我对C ++很陌生,所以在我学习的时候,我倾向于设计很多Java主义。无论如何,在Java中,如果我的类具有“搜索”方法,该方法将从匹配特定参数的
Collection< T >
返回对象T
,我将返回该对象,如果在集合中找不到该对象,我将返回null
。然后在我的通话功能中,我只需检查if(tResult != null) { ... }
在C ++中,我发现如果对象不存在,我不能返回null
值。我只想返回一个类型为T的'指示符',它通知调用函数没有找到任何对象。我不想抛出异常,因为它并不是一个特例。
这就是我的代码现在的样子:
class Node {
Attr& getAttribute(const string& attribute_name) const {
//search collection
//if found at i
return attributes[i];
//if not found
return NULL; // what should this be?
}
private:
vector<Attr> attributes;
}
我怎样才能改变它以便我能给出那种标记?
没有找到相关结果
已邀请:
8 个回复
超可林
否则,如果您坚持通过引用返回,那么如果找不到该属性,则应该抛出异常。 (顺便说一下,我有点担心你的方法是
并返回非
属性。出于哲学原因,我建议你回复
。如果你也想修改这个属性,你可以重载一个非
方法也返回非
属性。)
佃蒜狗掂哥
很可能找不到属性是执行的正常部分,因此不是非常特殊。对此的处理将是嘈杂的。无法返回空值,因为它具有空引用的未定义行为。 按指针返回
很容易忘记检查getAttribute的结果是否是非NULL指针,并且是一个容易出错的bug。 使用Boost.Optional
boost :: optional表示这里发生了什么,并且有简单的方法来检查是否找到了这样的属性。 旁注:std :: optional最近被投票到C ++ 17中,因此在不久的将来这将是一个“标准”的东西。
桔适丛
在源文件中的某处:
呈辖玫割善
返回值,你需要使用指针而不是引用。 参考文献本身不可能是
。 (请注意以后的评论海报:是的,如果真的真的尝试,你可以将引用的地址设为NULL)。 请参阅我的答案,以获取引用和指针之间的差异列表。
莽缓逢
上面的函数必须针对键'token'找到Operator,如果它找到了它返回true的那个并将值赋给参数Operator&amp;运。 此例程的调用者代码如下所示
痰嫉
。尾随
使返回值成为“引用”,它基本上是指向现有对象的保证 - 不为空的指针。如果您希望能够返回null,请将
更改为
。
蓟类
,因为函数的返回类型是对象
而不是
。
辩谷变充