【发布时间】:2011-02-08 00:23:28
【问题描述】:
我对 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;
}
我怎样才能改变它,以便我可以给出那种标记?
【问题讨论】:
-
Exception 和 NULL 并不总是唯一的解决方案。您通常可以选择一个值来返回指示未找到:例如,
std::find(first, last, value)如果没有元素匹配,则返回last。
标签: c++ return-value sentinel