【问题标题】:Why we can have a semicolon in if but not in while loop为什么我们可以在 if 中使用分号,但在 while 循环中却没有
【发布时间】:2020-12-09 04:33:33
【问题描述】:

为什么我可以这样做:

if (int result=getValue(); result > 100) {
}

但不能这样做:

while (int result=getValue(); result > 100) {
}

为什么要歧视while?条件就是条件。为什么while 不能像if 一样评估它?

为了使用while 实现所需的行为,我必须以这种方式实现它:

int result = getValue();
while (result > 100) {
    //do something
    result = getValue();
}

【问题讨论】:

  • 您为什么希望它们相同甚至相似?它们表达不同的东西,如果没有一个可以/应该被删除
  • 在 c++17 中对 if() 进行更改时,可能没有人提议对 while() 进行更改相关:https://en.cppreference.com/w/cpp/language/if
  • while statement with initializer 回答你的问题了吗?
  • 顺便说一句,最后一个 sn-p 的写法是while(int result; result = getValue() && result > 100) {}。我不确定您是否使用 while-with-initializer 描述了相同的语义。
  • @cigien,如果result 的期望值为0,我认为它不会起作用,因为它不会检查第二个条件。

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


【解决方案1】:

因为我们已经有了一个带初始化器的while循环。拼写:

for (int result=getValue(); result > 100;) {
}

【讨论】:

  • @armanali 如果你不想要循环,那你为什么要使用while
  • 您的编辑不会改变任何东西。 for 仍然可以完成这项工作。
  • 我仍然认为while 应该支持它,但出于我的目的,我也可以使用for。它会完成这项工作。
  • 您也许可以在 2023 年提交添加此内容的提案,尽管我怀疑它是否会被接受。
  • 建议的语法不是要在每次迭代时评估 init-statement 吗?
【解决方案2】:

我可以想到不添加此语法的 3 个原因。

  1. 有一个非常合适的构造,即for 循环,可以完全用于此目的。

  2. 向语言中添加任何功能都需要大量工作,并且需要为这样的提议提出一个非常有力的案例。鉴于第一点,我认为不会发生这种情况。

  3. 在我看来这是最重要的一个:如果这个特性被添加到语言中(比如说为了方便的语法,或者类似的东西),那么它基本上永远不会从语言中删除。这意味着while (;) 语法永远被禁止,我们很可能希望使用这样的语法来表达其他一些语义,放弃这个选项不是不经仔细考虑就应该做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多