C ++中的函数,可以返回一些东西,也可以什么也不返回

时间:2016-12-11 15:32:51

标签: c++ methods operator-overloading

我正在使用课程

class list
{
    int val;
    list *next;
}

我想重载[]运算符。这就是我想出的:

int & operator [](int n)

{
    list *p;
    p=this;
    for(int i=0; i<n; i++)
    {
        p=p->next;
        if(p==NULL)
        {
            cout<<"Index out of range ";
            return ?? ;
        }
    }

    return p->val;
}

我很想知道是否有办法在索引超出范围时不返回任何内容,因为返回的值的类型是int&amp;。

2 个答案:

答案 0 :(得分:2)

如果&#34;索引超出范围&#34;,则表示代码中存在严重的内部逻辑问题。

对于这种情况,在C ++中,您可以抛出异常,以指示异常情况。虽然有一些思想学派在使用异常时会皱眉,但它们是C ++的关键部分,并且在适当的地方使用异常并没有错。

另一方面,如果您的应用程序不认为索引超出范围是内部逻辑错误,并且很可能是应该正常处理的预期错误条件,那么处理此问题的一种方法是为您的operator[]返回一个具有布尔标志或适当命名的函数的实用程序对象,例如error()operator int()重载。因此,operator[]的用户现在负责弄清楚如何处理错误情况。

答案 1 :(得分:0)

可能的选择:

  • 使用http://en.cppreference.com/w/cpp/utility/optional - 可能是最优雅和最现代的cpp-way
  • 准备&#34;空对象&#34;作为你的类的静态成员并返回 引用它(如果结果正确,你也可以返回带对象的返回对和带有信息的布尔变量)
  • 返回指向element的指针,当没有时返回nullptr 结果(reather bad option)