这可能听起来很奇怪,但我懒得每次都写
if (threadAlive)
{
threadAlive = false;
}
else
{
threadAlive = true;
}
是否有类似于int ++或int--的东西可以将bool值更改为其相反值?
只需这样做:
threadAlive = !threadAlive;
b = !b
对于理解该语言的人来说是惯用语。 - Joel是的,有!
threadAlive ^= true;
(这是一个C#笑话,在大多数情况下,它在C/C++/Javascript中不起作用(取决于一些条件,它 可能 在C/C++/Javascript中生效),但它是真实的!^
是异或运算符)
threadAlive
的类型没有被指定。这将导致“不正确”的结果在大多数int
值中变成“正确”。 - seheC#
标签。但是添加了关于语言的注释。 - xanatosthreadAlive
的类型是 bool
(并且由于他在 if
中将其用作条件,这应该是一个安全的假设——尽管语言允许其他类型,具有隐式转换,我甚至看到一些程序员使用它们),它也应该在 C++ 中工作。 - James Kanze逻辑非运算符!
是一个一元运算符,它对其操作数进行取反。它适用于bool
类型,当且仅当它的操作数为false
时返回true
,当且仅当它的操作数为true
时返回false
:
threadAlive = !threadAlive;
如果你想要对基本类型进行运算符重载,那是不可能的。
正如其他人已经提到的,这绝对是你最好的选择:
threadAlive = !threadAlive;
bool
类型并重载++
或任何你想要的运算符来翻转值,但我永远不会建议这样做。下面的代码是绝对不应该使用的:
以下代码是绝对不应该使用的:
public class MyBool
{
bool Value;
public MyBool(bool value)
{
this.Value = value;
}
public static MyBool operator ++(MyBool myBoolean)
{
myBoolean.Value = !myBoolean.Value;
return myBoolean;
}
}
你也可以创建自己的扩展方法,但这并不是更好的方式。
!
操作符:bool b = true;
b = !b; // b is now false
threadAlive = ! threadAlive;