要引用的默认值,c ++

时间:2012-04-30 21:42:49

标签: c++ reference return default

所以我创建了一个链接列表,其中包含我创建的类对象的REFERENCES。

我想做一个方法,在链表中搜索并返回对象的const引用(如果它存在),否则,如果对象不存在,则返回SOME VALUE。

应该是哪个值?如果是int,我会返回0,如果是指针,我会返回NULL ....

const Node& NodeList::NodeNumSearch(int num) const
{
    Member *TempHead=MemberHead;
    while(TempHead!=NULL)
    {
        if(TempHead->GetNode().getNum() == num)
            return TempHead->GetNode();
        TempHead=TempHead->GetNext();
    }

    return ???;
}

P.S。 Member对象是链表的成员。 Node对象是链表的Member对象中的值。

3 个答案:

答案 0 :(得分:4)

在这种情况下,throw是异常,或者将函数更改为通过指针返回。这里没有一种理智的方式来返回“空”引用。

或者采用标准库方法并按值返回类似于类似interator的代理,然后可以检查它是否为end

答案 1 :(得分:2)

您可以将自己的NullNode定义为静态成员var并返回它。

// header
class NodeList
{
    .....

    static Node k_NullNode;
};


// cpp
/* static */ Node NodeList::k_NullNode; // you might need to pass a special argument to make it different from normal nodes.

const Node& NodeList::NodeNumSearch(int num) const
{
    ....

    return k_NullNode;
}

// test
void test()
{
    const Node& ret = NodeNumSearch(0);
    if( ret == NodeList::k_NullNode ) // you might need to override == operator.
    {
        // failed to search..
    }
    else
    {
        // succeeded..
    }
}

答案 2 :(得分:0)

我认为在C / C ++中,通常会传递一个指针来保存结果,并实际根据函数是否有效返回一个值。或者,如果它不起作用而不是传回一个默认对象,则应抛出异常。如果您希望其他代码使用默认值,则只返回默认值 - 对于看起来不太可能的搜索。

// Inject Node pointer to hold the reference
// Returns 1 if it worked, 0 otherwise
const int NodeList::NodeNumSearch(int num, Node* node) const
{
  //your code here
}