返回布尔值的函数与返回 void 的函数的速度相同吗?
为 a 赋值bool并丢弃bool返回值的开销非常小,以至于无法察觉。所以,从本质上讲,对于所有实际目的来说,是的。
有没有办法声明函数的 void 和 bool 版本?
函数不能仅根据返回值进行重载。您必须使用单独的函数名称:
bool myFunctionWithResult()
{
...
return ...;
}
void myFunctionWithoutResult()
{
myFunctionWithResult();
}
Run Code Online (Sandbox Code Playgroud)
void doSomething()
{
bool result = myFunctionWithResult();
// use result as needed...
}
void doSomethingElse()
{
myFunctionWithoutResult();
}
Run Code Online (Sandbox Code Playgroud)
或者给其中之一一个输出参数:
void myFunction(bool &result)
{
...
result = ...;
}
void myFunction()
{
bool ignored;
myFunction(ignored);
}
Run Code Online (Sandbox Code Playgroud)
void doSomething()
{
bool result;
myFunction(result);
// use result as needed...
}
void doSomethingElse()
{
myFunction();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以将其简化为单个函数:
void myFunction(bool *result = nullptr)
{
...
if (result)
*result = ...;
}
Run Code Online (Sandbox Code Playgroud)
void doSomething()
{
bool result;
myFunction(&result);
// use result as needed...
}
void doSomethingElse()
{
myFunction();
}
Run Code Online (Sandbox Code Playgroud)
不用说,对于 a bool(或任何其他原始类型),这是不必要的复杂。通常只是return/ boolprimitive,并让调用者根据需要丢弃该值。仅当输出是更复杂的类型(例如具有动态分配成员的类)时,这种微优化才真正重要,其中返回实例实际上会调用有时可能需要避免的开销。