【问题标题】:when need to do this in c++; if(x = 0) {}何时需要在 C++ 中执行此操作;如果(x = 0){}
【发布时间】:2021-03-01 16:01:20
【问题描述】:

我注意到有时开发人员会在他们的项目中这样做;

while(int x = 0) {//run code}
int y = 0;
if (y = someFunction())
{//run code}

我想问一下;

  1. 为什么 c++ 允许在循环中执行这些操作,例如 while,(也许 for 也是?)和 if-else 语句,有什么用?
  2. 什么时候有人应该在他的项目中这样做?
  3. 当这样的条件给出结果为真时?

【问题讨论】:

  • 如果您认为它不是重复的,我也很高兴重新打开。我当然不介意看到while(int x = 0) { 的解释。
  • @Bathsheba 如果您不同意关闭,您可以随时 ping 欺骗帖子的用户。他们负责投票结束,并且在大多数情况下很乐意重新评估。
  • @cigien: 砰!!!!!
  • @Batsheba 你是一个轻松的客人。给你看while(0 != x)晚餐比梅洛还要便宜
  • 请注意,这 2 个 sn-ps 是不等价的。第一个计算结果为false,但第二个取决于someFunction。您还可以添加您看到的来源吗?周围的上下文可能有助于理解用例。

标签: c++ if-statement while-loop


【解决方案1】:

有什么用?

if/for/while 中的声明允许缩小变量的范围。

所以,而不是

int y = somevalue();
if (y) {// y != 0
// ...
}
// y still usable :/

{ // extra block :/
    int y = somevalue();
    if (y) {// y != 0
        // ...
    }
}
// y no longer usable :)

你可以直接这样做:

if (int y = somevalue()) // y != 0
    // ...
}
// y no longer usable :)

使用可能确实令人惊讶的语法。

更多争议:

int y;
// ...
if (y = somevalue()) // y != 0
    // ...
}
// y still usable :)

这是允许的,因为该赋值是一个可转换为 bool 的表达式(y = x 的值是 y(已分配给 x)。

更容易引起争议,因为不清楚是否需要===。 一些约定使用额外的父母来更清楚地表达分配

if ((y = somevalue())) // really = intended, not ==
    // ...
}

什么时候有人应该在他的项目中这样做?

对于现有的项目,尽量使用现有的约定。

对于新项目,你必须做以下交易:

范围与不与其他语言共享的语法可能令人惊讶

当这样的条件给出结果为真时?

当给定表达式转换为真时,非零整数,非空指针。

c++17 引入了另一种语法,允许拆分 if/while 的声明和条件。 (for 已经允许拆分)

if (int y = somevalue(); y != 42) // y != 42
    // ...
}
// y no longer usable :)

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多