例如:
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
对象,我该如何以惯用的方式处理这种情况?
答案 0 :(得分:1)
是的,如果您发现在某些情况下您的功能突然没有返回值,那么:
答案 1 :(得分:1)
如果函数继续需要前置条件,则抛出异常是处理它的正确方法。如果在函数的其余部分中没有明确要求条件,那么您有几个选项:
std::unique_ptr
。我不推荐这种方法,因为它有不必要的动态内存分配。boost::optional<Foo>
或将来的TS std::experimental::optional<Foo>
。这表达了价值可能存在或不存在的意图。答案 2 :(得分:-2)
你最好的办法是返回一个指针:
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
}