假設我有一個 booleanbool和兩個 inta和b。如果 bool 為真,我想回傳 a < b,如果 bool 為假,我想回傳 a > b。顯然我可以寫:
if (bool)
return a < b;
else
return a > b;
但這是重復的。我只想寫一個回傳陳述句,格式為return a (desired operator) b,但我不確定那會是什么樣子。最簡單的方法是什么?顯然這個例子是相當簡單的,但是對于更大的代碼塊,我寧愿不必重寫它多次,只改變運算子。
uj5u.com熱心網友回復:
在我看來,C 中沒有這樣的運算子,另外,C 沒有運算子多載,所以這也是不可能的。
你能做的最好的就是封裝這個邏輯的函式:
function findWhetherLessOrMore(bool findWhetherLess, int operand1, int operand2) {
return findWhetherLess ? operand1 < operand2 : operand1 > operand2;
}
您可以將函式名稱更改為簡潔,以便在大量使用時不會使代碼膨脹。
正如此處其他答案所述,如果您必須在程式中進行過多的這些條件檢查,我建議您重新考慮您的設計。
uj5u.com熱心網友回復:
有一些選項,但沒有一個比直接寫你想要的更簡單。
宏:
#define OVERLOADER(cond,a,b,op1,op2) cond ? a op1 b : a op2 b
usage:
return OVERLOADER(cond, a, b, <, >);
虛函式(定義為靜態時可以很好地優化)
typedef int(*func)(int a, int b);
static int lt(int a, int b) { return a < b; }
static int gt(int a, int b) { return a > b; }
static int dispatcher(int cond, int a, int b, func aa, func bb) {
return cond ? aa(a,b) : bb(a,b);
}
// usage:
int main(int ac, char **av) {
return dispatcher(ac, (int)av[0][0],(int)av[0][1], lt, gt);
}
此外,如果運算子特別難以評估,則可以將問題轉換為形式
if (!cond) {
swap(a,b);
}
return a < b;
三元運算子將始終有助于在單行中撰寫條件陳述句和/或具有單個回傳陳述句。
return cond ? a < b : a > b;
// or
return (cond ? a : b) < (cond ? b : a);
無論如何,我會有點懷疑需要有數百個這樣的條件,我的直覺告訴我應該有一個更好的更高級別的設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477690.html
標籤:C
下一篇:如何在C中重復讀取和連接字串
