假設我想根據依賴于條件的復雜計算來分配一個 const 變數。
如果情況很簡單,我可以這樣做:
const int N = myBool ? 1 : 2;
但它更像
const int N = myBool ? <lengthy calculation> : <other lengthy calculation>;
我正在做的是這個,但我想要更干凈的東西:
int N_nonconst;
if (myBool) {
N_nonconst = <lengthy calculation>;
}
else {
N_nonconst = <other lengthy calculation>;
}
const int N = N_nonconst;
顯然,我也可以這樣做:
int possibility1 = <lengthy calculation>;
int possibility2 = <other lengthy calculation>;
const in N = myBool ? possibility1 : possibility2;
但我實際上只想執行其中一項冗長的計算。
如果我要擴展語言,我會考慮做出類似const_deferredAssignment宣告:
const_deferredAssignment int N;
if (myBool) {
N = <...>;
}
else {
N = <...>;
}
我也可以將這些計算封裝在函式/方法中,但它們使用了一堆本地變數,所以這將是一個相當冗長的函式呼叫。
uj5u.com熱心網友回復:
您可以將每個計算包裝在 lambda 中,并捕獲區域變數以減少其引數的冗長
{
// ...
auto firstFunc = [&]() -> int { ... };
auto secondFunc = [&]() -> int { ... };
const int N = myBool ? firstFunc() : secondFunc();
}
這樣,實際上只執行了兩個函式中的一個。
uj5u.com熱心網友回復:
您可以將冗長的計算移至單獨的函式:
int lengthCalculation()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}
const int N = lengthCalculation();
如果您不想創建可以使用本地 lambda 的單獨函式:
const int N = [&]()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}();
uj5u.com熱心網友回復:
你可以嘗試使用
SWITCH(myBool)
{
Case 0 : first_lengthy_calculation
Break;
Case 1 : second_lengthy_calculation
Break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409056.html
標籤:
