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