gpt4 book ai didi

c++ - 条件检查 : if(x==0) vs. if(!x)

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:45 26 4
gpt4 key购买 nike

if(x==0)if(!x) 有什么区别?或者它们总是等价的?对于不同的 C++ 内置类型的 x:

  • bool
  • int
  • 字符
  • 指针
  • iostream
  • ...

最佳答案

假设存在从类型到支持 if (x)if (!x) 的类型的转换,那么只要没有不同的类型operator int()opterator bool() 的转换,结果是一样的。

if (x == 0) 将使用“最佳”转换,其中包括 boolvoid * 转换器。只要有任何转换器可以将类型转换为某种“标准类型”。

if(!x) 将执行完全相同的操作,它将使用任何可转换为标准类型的转换器。

这两个当然都假设转换器函数不是 C++11“不默认转换”。

当然,如果你有这样的类:

class
{
int x;
public:
bool operator bool() { return x != 0; }
int operator int() { return x == 0; }
};

然后 if (x == 0) 将执行 if ( (x == 0) == 0)if (!x) 将执行 if (! (x != 0),这是不一样的。但现在我们真的想制造麻烦,这是设计得非常糟糕的代码。

当然,对于 x == 0 不会导致 false 的任何 operator int() 都可以使上面的示例出错true 所有其他值。

关于c++ - 条件检查 : if(x==0) vs. if(!x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com