要引用的默认值 c++

Default values to reference, c++

本文关键字:c++ 默认值 引用      更新时间:2023-10-16

所以我做了一个链表,其中包含我创建的类对象的引用。

我想做一种方法,在链表中搜索并返回对对象的 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 ???;
}
附言成员对象是链表

的成员,节点对象是链表的成员对象中的值。

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

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

您可以将自己的 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..
    }
}
我认为

在 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
}