C++ 为什么在if中可以有分号,而在while循环中不能有分号

C++ 为什么在if中可以有分号,而在while循环中不能有分号,c++,if-statement,while-loop,c++17,c++20,C++,If Statement,While Loop,C++17,C++20,为什么我可以这样做: if (int result=getValue(); result > 100) { } 但不能这样做: while (int result=getValue(); result > 100) { } 为什么在时歧视?条件就是条件。为什么而不能像那样评估它呢 为了在中实现所需的行为,而,我必须以以下方式实现它: int result = getValue(); while (result > 100) { //do something

为什么我可以这样做:

if (int result=getValue(); result > 100) {
}
但不能这样做:

while (int result=getValue(); result > 100) {
}
为什么在时歧视
?条件就是条件。为什么
不能像
那样评估它呢

为了在
中实现所需的行为,而
,我必须以以下方式实现它:

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

因为我们已经有了一个带有初始值设定项的while循环。它的拼写是:

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

我可以想出三个不添加此语法的原因

  • 有一个非常合适的结构,即
    for
    循环,可以完全用于此目的

  • 在语言中添加任何特性都是一项艰巨的工作,需要为这样一个提议提供强有力的理由。考虑到第一点,我认为这种情况不会发生

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


  • @armanali如果您不想要循环,那么为什么在使用
    的同时使用
    ?您的编辑不会更改任何内容
    for
    仍然可以完成这项工作。我仍然认为
    while
    应该支持它,但出于我的目的,我也可以使用
    for
    。它将完成这项工作。虽然我怀疑它是否会被接受,但您可能能够在2023年提交一个添加此内容的建议。建议的语法不希望每次迭代都对init语句进行评估吗?为什么您希望它们相同或相似?它们表达了不同的东西,如果没有一个可以/应该被删除的话,那么在c++17中对if()进行更改时可能没有人建议对while()进行更改相关:是否回答了您的问题?顺便说一句,编写最后一个代码段的方法是
    while(int-result;result=getValue()&&result>100){}
    。我不确定您在用while with initializer描述相同的语义。@cigien,如果
    result
    的期望值为0,我认为它不起作用,因为它不会检查第二个条件。