我知道双感叹号的作用(或者我认为我知道),但我不确定如何在一个随机对象上定义它。例如,在下面的代码片段中:
Assignment *a;
if (!getAssignment(query, a))
return false;
hasSolution = !!a;
if (!a)
return true;
我该如何知道双重感叹号会产生什么值?换句话说,它是否总是转换为true?false?还是你可以定义一个行为来确定结果(对象如何知道在这种情况下如何处理)?由于所有这些感叹号的事情让我有点困惑,对这段代码的任何解释都将不胜感激。希望我表述清楚了,谢谢。
!!
是一种反模式,就是这样。 - Konrad Rudolphoperator!
而不是operator!
和operator bool
(或某些安全布尔习惯用法)的模式。 - ildjarnstatic_cast
或者!!
-- 哪一个更易于输入和阅读呢? - ildjarn!!
这样的隐式强制转换,而应该明确地进行比较(在最后一种情况下,这是弱类型)。使用a != nullptr
。 - Konrad Rudolph