gpt4 book ai didi

c++ - 双倍为真/假

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:50 25 4
gpt4 key购买 nike

Bjarne 建议使用 if 中的条件作为范围限制。特别是这个例子。

if ( double d = fd()  ) {
// d in scope here...
}

我很好奇如何从真/假意义上解释声明。

  1. 这是一个声明
  2. 这是双倍的。

编辑:在6.3.2.1 C++编程语言中作为推荐。

Edit2:templatetypedefs 对指针的建议,尤其是动态转换,可能会深入了解 Bjarnes 的建议。

SteveJessop 告诉我:- 条件不是表达式,它也可以是声明,使用的值是被评估的值。

最佳答案

您看到的代码是一种专门用于在 if 语句中声明变量的技术。你通常会看到这样的东西:

if (T* ptr = function()) {
/* ptr is non-NULL, do something with it here */
} else {
/* ptr is NULL, and moreover is out of scope and can't be used here. */
}

一个特别常见的情况是在此处使用dynamic_cast:

if (Derived* dPtr = dynamic_cast<Derived*>(basePtr)) {
/* basePtr really points at a Derived, so use dPtr as a pointer to it. */
} else {
/* basePtr doesn't point at a Derived, but we can't use dPtr here anyway. */
}

您的情况是您在 if 语句中声明了一个 double。 C++ 自动将任何非零值解释为 true,将任何零值解释为 false。这段代码的意思是“声明 d 并将其设置为等于 fd()。如果它不为零,则执行 if 语句。”

也就是说,这是一个非常糟糕的主意,因为 double 会受到各种舍入错误的影响,这些错误会阻止它们在大多数情况下为 0。这段代码几乎肯定会执行 if 语句的主体,除非 function 表现良好。

希望这对您有所帮助!

关于c++ - 双倍为真/假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217179/

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