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