【问题标题】:Don't understand what's going on in the "if" condition?不明白“if”条件下发生了什么?
【发布时间】:2021-02-10 13:20:13
【问题描述】:

有点奇怪的问题。但不幸的是。我无法理解 Unreal C++ 代码中条件中所写的逻辑。

我在成员函数中有条件:

void MoveForward(float amount)
{
  if (amount)
{
 // do that
}
}

“数量”参数在条件中是什么意思?验证是为了什么?如果是已安装?还是会真实? 很抱歉这个扭曲的问题,不幸的是,目前这一切都是新的......

【问题讨论】:

标签: c++ unreal-engine4


【解决方案1】:

如果amount 不为零则视为true,如果amount 为零则视为false

引自N3337 6.4 选择声明

4 在 switch 语句之外的语句中作为初始化声明的条件的值是 声明变量的值根据上下文转换为布尔值(第 4 条)。

引自 N3337 4.12 布尔转换

1 算术、无范围枚举、指针或指向成员类型的指针的纯右值可以转换为 bool 类型的纯右值。将零值、空指针值或空成员指针值转换为 false; 任何其他值都将转换为 true。

【讨论】:

  • (所以 NaN 值也被认为是真的。这至少与 NAN != 0.0 是真的一致。)
【解决方案2】:

在 C 和 C++ 中,if 测试非零值。任何非零的东西都被认为是真的。当谈到浮点值时,究竟什么是零是书籍可以并且已经写过的东西,所以如果你想要可靠的代码就不要这样做。假设它测试了amount != 0.0f 是安全的。

但就编译器而言,浮点数可以隐式转换为整数,并且可以测试其非零性。

【讨论】:

  • 我不懂 C,但在 C++ 中,条件转换为 bool,不涉及整数 afaik
  • @largest_prime_is_463035818 好吧,公平地说,bool 一个整数类型(而std::numeric_limits<bool>::is_integer也是true),但是是的,“已转换到整数” 是不准确的。
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 2012-10-18
  • 2018-01-27
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2013-01-25
  • 2020-12-31
相关资源
最近更新 更多