簡體   English   中英

C++返回類型nodiscard函數和void函數定義

[英]C++ return type nodiscard function and void function definition

如果我有一個返回布爾值的函數版本,我想要一個不返回布爾值的函數版本。 我嘗試在函數定義周圍使用 nodiscard,但它不允許同時使用這兩個定義。 返回布爾值的函數與返回 void 的函數的速度是否相同? 如果沒有,那么有沒有辦法聲明一個函數的 void 和 bool 版本?

我不需要更多空間來描述我的問題,這很簡單。 但我必須做一些奇怪的事情才能讓我發布我的問題。

返回布爾值的函數與返回 void 的函數的速度是否相同?

將值分配給bool並丟棄bool返回值的開銷非常小,以至於不會引起注意。 所以,基本上,對於所有實際目的都是如此。

有沒有辦法聲明一個函數的 void 和 bool 版本?

函數不能僅在返回值上重載。 您必須使用單獨的函數名稱:

bool myFunctionWithResult()
{
    ...
    return ...;
}

void myFunctionWithoutResult()
{
    myFunctionWithResult();
}
void doSomething()
{
    bool result = myFunctionWithResult();
    // use result as needed...
}

void doSomethingElse()
{
    myFunctionWithoutResult();
}

或者給其中之一一個輸出參數:

void myFunction(bool &result)
{
    ...
    result = ...;
}

void myFunction()
{
    bool ignored;
    myFunction(ignored);
}
void doSomething()
{
    bool result;
    myFunction(result);
    // use result as needed...
}

void doSomethingElse()
{
    myFunction();
}

在這種情況下,您可以將其簡化為單個函數:

void myFunction(bool *result = nullptr)
{
    ...
    if (result)
        *result = ...;
}
void doSomething()
{
    bool result;
    myFunction(&result);
    // use result as needed...
}

void doSomethingElse()
{
    myFunction();
}

不用說,對於bool (或任何其他原始類型),這是不必要的復雜。 只需正常return bool /primitive ,並讓調用者根據需要丟棄該值。 這種微優化只有在輸出是更復雜的類型時才真正重要,例如具有動態分配成員的類,其中返回實例實際上會調用您有時可能需要避免的開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM