我目前正在处理某人的其他代码,并提供类似这样的声明
if(x.start()) do if(y.foo(x)) {
// Do things
}while(x.inc())
此处x
是自定义类,它包含y
的信息,并允许以特殊顺序迭代其元素。如果相关,我会提供此信息,但我的问题更为笼统:
我认为在do{}while()
语句中,do
部分必须跟在括号后面,并且最后在while()
条件的最后部分定义了do-while循环。
if
之后放置do
? do
和{
之间还有什么其他内容?我无法找到与此相关或谷歌相关的其他问题,大多数相关内容都与if
内的while loop
语句相关。
答案 0 :(得分:9)
语法允许do
和while
之间的任何语句。只是你通常会看到一种特殊形式的语句 - 复合语句,{ /* statements */ }
,通常也称为块。
代码的do-while部分完全等同于
do {
if(y.foo(x)) {
// Do things
}
} while(x.inc());
答案 1 :(得分:5)
do-while语句按以下方式定义
do statement while ( expression ) ;
所以在do和while之间可以有任何语句,包括if语句。
关于你的问题
•do和{?
之间可以放什么
根据语法后做必须有一个声明。因此,唯一可能看起来很奇怪但有效的可能性是放置标签。例如
do L1: { std::cout << "Hello do-while!" << std::endl; } while ( false );
因为也可以使用标签语句。
例如,帖子中的do-while语句可能看起来像
if(x.start()) do Come_Here: if(y.foo(x)) {
// Do things
}while(x.inc())
考虑到您也可以使用空语句。在这种情况下,它看起来像
do ; while ( false );
或
do Dummy:; while ( false );
还有一个有趣的陈述
do One: do Two: do Three:; while ( 0 ); while ( 0 ); while ( 0 );
同样在C ++声明中也是语句。所以你可以在do和while之间放置一个声明。
例如
int n = 10;
do int i = ( std::cout << --n, n ); while ( n );
在C声明中不是声明。因此,您可能不会在C中的do和while之间放置声明。
另一个有趣的例子
#include<iostream>
#include <vector>
#include <stdexcept>
int main()
{
std::vector<int> v = { 1, 2, 3 };
size_t i = 0;
do try { std::cout << v.at( i ) << ' '; } catch ( const std::out_of_range & )
{ std::cout << std::endl; break; } while ( ++i );
return 0;
}
程序输出
1 2 3
答案 2 :(得分:2)
根据C ++ 14标准,
§6.5迭代声明:
do statement while ( expression );
statement
可以是:
§6声明:
labeled-statement
expression-statement
compound-statement (also, and equivalently, called “block”):
{ statement-seq }
statement-seq:
statement
statement-seq statement
...
因此,您可以在do
和while
之间添加任何有效的语句。
请注意,在 do 语句中,重复执行子语句,直到expression
的值变为false
。每次执行statement
后都会进行测试。
答案 3 :(得分:0)
do while语句的语法是:
做语句while(表达式);
基本上,您可以在do关键字之后和while关键字之前放置任何语句。在常见的使用中,我们使用大括号括号来允许对多个语句进行分组(复合语句),但是如果要在do关键字后面只放置一个语句,则大括号是可选的。虽然我强烈建议使用花括号来提高可读性。
在你的情况下,如果block是一个完整的陈述,那就完全没问了。
这是包含单个语句的do语句的另一个示例。
int i = 0;
do std::cout<<i<<std::endl;
while (i++ < 5);
答案 4 :(得分:0)
我认为这种缩进会造成一些混乱。
我个人会写这个:
s3
do之后的语句如果只有一个“行”则不需要括号。与此相同,只有在有更多说明时才使用括号。在这种情况下,括号用于if,因为do-while只有一条指令,他不使用括号。
这就是我的想法,如果有人能确认会更好。