繁体   English   中英

如果不满足条件,我应该在成员函数中返回什么?

[英]What should I return in a member function if a condition is not met?

例如:

class Foo{
   int data;
   // ...
}

并且有一个成员函数:

Foo func(int a){
  if(a > 10) return Foo(a);
  else {} // problem is here, I do not want return 
             any Foo object, do I throw exception? how?
}

因此,我不想在else块中返回一个新的空Foo对象,如何以惯用的方式处理这种情况?

是的,如果您发现在某些情况下您的函数应该突然不返回值,则可以:

  • 引发异常,或者
  • 您的设计已损坏

如果继续运行该函数绝对需要先决条件,则抛出异常是处理它的正确方法。 如果在其余函数中没有明确要求该条件,则有两种选择:

  • 返回管理指针的唯一指针,即std::unique_ptr 我不推荐这种方法,因为它具有不必要的动态内存分配。
  • 返回boost::optional<Foo>或将来的TS std::experimental::optional<Foo> 这表示该值可能存在或可能不存在。
  • 重新评估您的设计。 为什么退货取决于条件? 有什么不同的方法可以做? 等等

最好的选择是返回一个指针:

Foo* func(int a){
  if(a > 10) return new Foo(a);
  else return 0; // else return plain zerro
}

C ++ 11

Foo* func(int a){
  if(a > 10) return new Foo(a);
  else return nullptr;
}

当然,您需要检查调用的函数中是否确实存在返回的对象:

Foo* ptr = func(5);
if(ptr)
{
    // use ptr
    *ptr;
}
else
{
    // do not use it
}

// and delete it
if(ptr) delete ptr;

// in c++11 version no need to check just:
delete ptr;

抱歉,我没有看到您不想返回0 ...

Foo* func(int a){
  if(a > 10) return new Foo(a);
  else throw(a);
}

try
{
    Foo* get = func(4); // this will throw
}

catch(int)
{
     //handle the error here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM