这个问题已经在这里有了答案:




9年前关闭。






我正在使用生产代码,在其中多次运行过这样的语句:

Class.func(!!notABool);

在前几次,我以programmer quirk(也许是强调它是一个条件语句而不是将数字传递给func?)的形式将其取消了,但是我遇到了使用上述语句的多个语句,现在我想知道它是否实际上是否有所作为。在大多数情况下,notABool是一个数字(int,float,double ...我已经看过所有3个),我最初的猜测是它类似于键入:
Class.func((bool)notABool);

但我不确定吗?

最佳答案

对于原始类型,是的,它本质上等效于:

!(notABool != 0)

而这等效于:
(bool)notABool

对于非原始类型,这将是编译器错误,除非您重载了operator!,在这种情况下,它可能会执行任何操作。

10-08 18:08