[英]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.