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,我认为它不起作用,因为它不会检查第二个条件。