返回类型 nodiscard 函数和 void 函数定义

Sub*_*ons 0 c++ boolean function void

如果我有一个返回 a 的函数版本bool,我想要一个不返回 a 的函数版本bool。我尝试nodiscard了函数定义,但它不允许这两种定义。

返回布尔值的函数与返回 void 的函数的速度相同吗?如果没有,那么有没有办法声明函数的 void 和 bool 版本?

Rem*_*eau 5

返回布尔值的函数与返回 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,并让调用者根据需要丢弃该值。仅当输出是更复杂的类型(例如具有动态分配成员的类)时,这种微优化才真正重要,其中返回实例实际上会调用有时可能需要避免的开销。