我刚在微软的guiddef.h头文件中找到了这个:
__inline bool operator==(REFGUID guidOne, REFGUID guidOther)
{
return !!IsEqualGUID(guidOne,guidOther);
}
两个惊叹号!!
有什么意义,还是开发者当时只是随便搞了一下?
它关闭了Visual C++关于转换为布尔类型的愚蠢性能警告。
return IsEqualGUID(guidOne, guidOther) != 0;
,这实际上是一样的。 - sharptoothbool
的语义,!!
和!=0
都是不必要的;转换将隐式进行,并且其行为方式与!!
相同。该代码,或至少是该习惯用法,可能可以追溯到C++没有bool
作为内置类型的时期,或者至少是在现代C++中它的行为方式之前。显式转换为bool
(使用最合适的强制转换类型)可能会更清晰,并且可能还会抑制警告。 - Keith Thompson
operator==
是特定于C++的。 - Keith Thompson