主要的是我不知道处理空指针的最佳做法。
这是代码:
int GetSomeVal()
{
if(ptr)
{
return *ptr
}
else
{
// What here?
// Should I return 0? or -1 or throw an exception?
}
}
我有这个问题,因为在google的c ++样式指南中,它并不建议我们使用异常,这可能是另一个主题。
如果我应该使用异常,这是否意味着我必须设计一个异常类抛出它? 如果我不应该使用例外,那么最佳做法是什么?
答案 0 :(得分:7)
如果ptr
为NULL
有意义,则不应抛出异常。例外用于表示出现问题。
如果ptr
为NULL
因为出了问题,请务必抛出异常。
Google的代码风格将由Google使用。它们禁止通常在任何高级OO语言中使用的许多东西(如引用参数,异常等)。除非你为谷歌工作,否则你不应该遵守它。
您可以设计自己的异常类,从std::exception
派生,然后从代码中抛出它。
此外,从您的代码中,ptr
是会员。如果它应该在构造函数中初始化而它没有,那么也许你应该从构造函数中抛出异常。拥有一个不可用的对象毫无用处。
答案 1 :(得分:1)
如果您不想抛出异常,我会按此顺序使用这些选项
boost::optional
int GetSomeVal(int &ok)
- 如果指针为false
NULL
如果指针为NULL
(例如-1
),则返回一些错误代码
答案 2 :(得分:1)
这在很大程度上取决于功能规格。
ptr==NULL
可能是函数的有效但异常的输入,例如,它是由程序的错误输入数据引起的。然后处理它的最好方法是返回错误代码或抛出一个异常,该异常旨在处理调用链。
在其他情况下,ptr==NULL
永远不会在设计上发生,但仅仅是因为其他地方的错误。然后最好的方法是记录错误并终止程序。