这个问题已经在这里有了答案:
9年前关闭。
我正在使用生产代码,在其中多次运行过这样的语句:
Class.func(!!notABool);
在前几次,我以
programmer quirk
(也许是强调它是一个条件语句而不是将数字传递给func?)的形式将其取消了,但是我遇到了使用上述语句的多个语句,现在我想知道它是否实际上是否有所作为。在大多数情况下,notABool
是一个数字(int,float,double ...我已经看过所有3个),我最初的猜测是它类似于键入:Class.func((bool)notABool);
但我不确定吗?
最佳答案
对于原始类型,是的,它本质上等效于:
!(notABool != 0)
而这等效于:
(bool)notABool
对于非原始类型,这将是编译器错误,除非您重载了
operator!
,在这种情况下,它可能会执行任何操作。