難道是用全矢量計算使用下面的預處理器伎倆在代碼中的好的做法呢?一方面它使用通用標識符(mul,add,...)污染命名空間,並且聞起來像一個骯髒的黑客,但另一方面它可能會使複雜的表達式更具可讀性。 有沒有其他的優點/缺點?運算符重載的語法使用C中的預處理
typedef struct { double x,y; } vector;
vector vector_add(vector v0, vector v1);
double vector_mul(vector v0, vector v1);
...
#define _(a) opf(a)
#define mul ,mul,
#define add ,add,
...
#define opf(a,o,b) vector_##o((a),(b))
void example(void)
{
vector a, b, c;
double d;
d = _(_(a add b) mul c);
// equivalent without the macros:
d = vector_mul(vector_add(a,b),c);
}
有什麼特別的理由不使用C++?順便說一句,第二個例子更加可讀。 – Anycorn
是的,這是一個現有的C項目。我不確定可讀性。特別爲更長的表達。 – simon
這會嚴重影響代碼的可維護性和非常小的可讀性增益(這也是非常有爭議的)。中綴記法真的很特別嗎?另外,我個人認爲操作符重載在大多數語言中都是一個值得懷疑的想法。 – jrajav