有什么区别if(x==0)
vs. if(!x)
?或者它们总是等价的?对于不同的 C++ 内置类型x
:
bool
int
char
pointer
iostream
- ...
假设存在从类型到支持的类型的转换if (x)
or if (!x)
,那么只要没有不同的转换operator int()
than opterator bool()
,结果将是相同的。
if (x == 0)
将使用“最佳”转换,其中包括bool
or void *
转换器。只要有任何转换器可以将类型转换为某种“标准类型”。
if(!x)
会做完全相同的事情,它将使用任何转换为标准类型的转换器。
当然,这两者都假设转换器函数不是 C++11“不默认转换”。
当然,如果你有这样的课程:
class
{
int x;
public:
bool operator bool() { return x != 0; }
int operator int() { return x == 0; }
};
then if (x == 0)
会做if ( (x == 0) == 0)
and if (!x)
会做if (! (x != 0)
,这不一样。但现在我们真的想制造麻烦,而且这是设计得非常糟糕的代码。
当然,上面的例子可能会因任何原因而出错operator int()
这不会导致false
for x == 0
and true
对于所有其他值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)