我正在使用课程
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;。
答案 0 :(得分:2)
如果&#34;索引超出范围&#34;,则表示代码中存在严重的内部逻辑问题。
对于这种情况,在C ++中,您可以抛出异常,以指示异常情况。虽然有一些思想学派在使用异常时会皱眉,但它们是C ++的关键部分,并且在适当的地方使用异常并没有错。
另一方面,如果您的应用程序不认为索引超出范围是内部逻辑错误,并且很可能是应该正常处理的预期错误条件,那么处理此问题的一种方法是为您的operator[]
返回一个具有布尔标志或适当命名的函数的实用程序对象,例如error()
和operator int()
重载。因此,operator[]
的用户现在负责弄清楚如何处理错误情况。
答案 1 :(得分:0)
可能的选择: