2016-12-11 40 views
2

我使用的是类功能在C++中是可以返回的东西,或者什么都不

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 &的方式。

回答

0

可能的选项:

  • 使用http://en.cppreference.com/w/cpp/utility/optional - 可能是最优雅和现代CPP-方式
  • 准备“空对象”作为类的静态成员,并返回 参考(您也可以返回用对象和布尔变量返回对与信息,如果结果是正确的)
  • 返回指针元件和nullptr当没​​有 结果(reather坏的选择)
+0

*“可能是最优雅和现代的cpp方式”* - 更重要的是,这是错误的方式。如果一个函数不能实现它的承诺,你会抛出一个异常。不要把一个简单的规则变成一个过度设计的混乱,只是因为你可以使用你拥有的所有流血的边缘工具。 – IInspectable

2

如果“索引超出范围”,则表示代码中存在主要的内部逻辑问题。

对于这种情况,在C++中可以抛出异常来指示异常情况。尽管有一些思想流派使用异常,但它们是C++的关键部分,在适当的情况下使用异常没有任何问题。

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

相关问题