C/C++ 中的逻辑否定和赋值运算符?
Logical negation and assignment operator in C/C++?
有没有更简洁的方法来编写此函数的第二行而不重复冗余a
?
void myfunc()
{
bool a = false; // Assume that this won't alway be hardcoded to false.
a = !a;
}
有没有更简洁的方法在不重复冗余的情况下编写此函数的第二行?
!
是一元运算符,如果这是您所期望的,则无法将其与=
相关联。
但是你可以做一些类似的事情a ^= true;
,这不是更简洁的方式,但这不会重复冗余。无论如何,这不是一个与a = !a;
相反的好方法,后者更具可读性
好吧,我真的没有看到这样做的价值,但您可以使用 xor 或简单的递减。这两种方法都有效。
a ^= 1;
a--;
那么你就不必重复a
.
但是,如果您希望它非常清晰,请考虑使用一个函数:
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)))
但即使这样,我也不愿使用。
老实说,这并不是一个值得解决的问题。 :)
唯一可能的答案是:不幸的是不是。
一元运算符!
实际上足够简洁,任何其他技巧都会导致代码不可读。
任何其他快捷方式形式,例如二进制运算符,如+
或*
:
a += 5;
b *= 7;
保持对运算符的原始含义的引用:分别乘法和加法。
在你的句子中:
无需重复冗余
a
有一个错误的假设,即a
是多余的,以防编译器被指示在不重复变量名称的情况下否定a
。不:它告诉阅读代码的人(甚至你自己,例如一年后!(要否定的变量是a
。由于 C 语法没有为逻辑否定运算符定义任何句法糖,因此a
根本不是多余的。
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 基类和派生类的多态赋值运算符
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么初始化时没有调用重载赋值运算符?
- 赋值运算符重载和自赋值
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 对 r 值使用移动赋值运算符时的异常
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 默认赋值运算符如何在实际 STL 中实现
- 使用赋值运算符复制 std::vector
- C++ 通过自定义赋值运算符隐式转换函数参数
- 赋值运算符的奇怪行为
- C++赋值运算符,我们可以用 copy 替换它吗?