在this answer期间,我们心爱的Jon Skeet认为do {} while ()
需要一个语句终结符,因为while()
需要一个语句体,并继续举例说明:
while (true);
(空语句)或while (true) {}
(阻止语句)
......会有效。
第二个例子,事情非常简单; while循环执行复合(块)语句({}
),它是空的。
然而,第一个例子和Skeet的描述一起引发了一个有趣的问题:
;
(或任何其他迭代语句)中的while(true);
是否会终止while
(/ statement)本身(在某种意义上),或者它是否终止了一个实际的不可见空语句在)
和终结者之间?
答案 0 :(得分:3)
从语法的角度来看,它终止了这个陈述。尽管如此,这是一个非常古怪的想法。 while
循环必须有一个正文,所以如果你只是写
while(true)
解析器不知道“语句”在哪里结束,因为它缺少一个令牌。您可以用另一个语句“终止”该语句。
while (true) i++;
和;
一样有效。你真正应该考虑的方式是写作
while (true) ;
真的是一个带有空语句的while循环,而不是试图想到“终止语句”
答案 1 :(得分:0)
用例就是如果你有while(something());
它会执行something()
直到它返回false。所以你不一定需要一个身体。
这等同于
while(true){
if (something()) break;
}
您可以像await
运算符一样使用它来等待操作。
答案 2 :(得分:0)
根据您的回答,它肯定是一个空洞的陈述。
来自that answer:
每个表达式声明和声明声明的末尾都有一个分号。
(
if
,for
等语句不是表达式或声明语句。)
和while
似乎是相同的(除了do...while
是一个例外,如前所述)。