有没有办法在不使用指针或引用的情况下做我想做的事情?
以下是代码:
Node getSmallest() {
if (openList.empty())
return 0; // syntax error
// some other code
}
答案 0 :(得分:7)
您可以使用boost::optional
返回可选值。或者等待C ++ 14并使用std::optional
。
答案 1 :(得分:6)
是。你可以抛出异常。
答案 2 :(得分:3)
当代码成功时,您似乎想要返回Node
对象的副本。
struct Node{
int a;
bool isEmpty_;
Node(bool isEmpty):isEmpty_(isEmpty)
};
Node getSmallest() {
if (openList.empty())
return Node(false);
// some other code
}
没有别的方法,你必须返回一个对象,在内部可以设置isEmpty
标志来表示错误。
答案 3 :(得分:2)
getSmallest()函数的返回类型定义为Node对象,在C ++中表示 返回的表达式必须是Node类型,并且在运行时返回的对象的内存将被复制回调用者。
因为,你不能返回整数0。
相反,您可以为Node定义一个表示NULL节点的特定实例对象。这基本上取决于Node的定义,假设如下:
class Node {
// Some representative field
int a;
// Some basic constructor
Node(int a){
this->a = a;
}
}
您可以使用类似于:
的方式定义NULL节点class Node {
// Some representative field
int a;
// Some basic constructor
Node(int a){
this->a = a;
}
static Node NULL_NODE(-1);
}
上面的示例假设您实际从不在其他Node对象中为字段a
分配值-1。如果-1不符合您的目的,您可以选择一个您从不使用的值。
如果节点中有多个字段,则可以使用值的组合表示NULL_NODE。
如上所述,您现在可以像这样实现您的功能:
Node getSmallest() {
if (openList.empty())
return Node.NULL_NODE; // syntax error
// some other code
}
否则,您可以使用允许您执行相同操作的第三方工具。 有关此案例,请参阅其他人的答案。