[英]Logical negation and assignment operator in C/C++?
有沒有更簡潔的方法來寫a
function 的第二行而不重復冗余?
void myfunc()
{
bool a = false; // Assume that this won't alway be hardcoded to false.
a = !a;
}
好吧,我真的看不出這樣做的價值,但你可以使用異或或簡單的遞減。 這兩個都有效。
a ^= 1;
a--;
然后你就不必重復a
。
但如果你想讓它非常清楚,可以考慮使用 function:
void flip(bool *b)
{
(*b)--;
}
bool b = true;
flip(&b);
C++,可以參考
void flip(bool &b)
{
b--;
}
bool b = true;
flip(b);
或者寫一個宏。 實際上,宏對於解決重復問題非常方便。 雖然,我幾乎從不為此使用它們,因為它根本不值得付出努力。 我寫了一個宏來避免重復調用 malloc。 這樣的調用通常如下所示:
int *x = malloc(12 * sizeof *x);
您可以避免重復:
#define ALLOC(p, n) \
((p) = malloc((n) * sizeof *(p)))
但即使是這樣,我也猶豫要不要使用。
老實說,這真的不是一個值得解決的問題。 :)
有沒有更簡潔的方法來寫這個 function 的第二行而不重復冗余?
!
是一元運算符,如果這是您所期望的,則不能將它與=
相關聯。
但是你可以做類似a ^= true;
事情。 ,這不是一個更簡潔的方式,但這是沒有多余的重復。 無論如何,這不是與a =;a;
相反的好方法。 這更具可讀性
唯一可能的答案是:不幸的是不是。
一元運算符!
實際上已經足夠簡潔了,任何其他技巧都會導致代碼不可讀。
任何其他快捷形式,例如+
或*
等二元運算符:
a += 5;
b *= 7;
保持對運算符本義的引用:分別為乘法和加法。
在你的句子中:
無需
a
錯誤的假設是a
是多余的,以防編譯器可以被指示否定a
而不重復變量名。 不:它告訴閱讀代碼的人(甚至是你自己,例如一年后!)要取反的變量是a
. 並且由於 C 語法沒有為邏輯否定運算符定義任何語法糖, a
根本不是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.