C++ Do if(){}while()语句
我目前正在处理别人的代码,使用这样的语句C++ Do if(){}while()语句,c++,do-while,control-structure,C++,Do While,Control Structure,我目前正在处理别人的代码,使用这样的语句 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(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循环中有关。语法允许do
和while
之间的任何语句。只是你通常会在那里看到一种特殊的语句形式-复合语句,{/*语句*/}
,也称为块
代码的do-while部分与
do {
if(y.foo(x)) {
// Do things
}
} while(x.inc());
do while语句的定义方式如下
do statement while ( expression ) ;
所以在do和while之间可以有任何语句,包括if语句
int i = 0;
do std::cout<<i<<std::endl;
while (i++ < 5);
至于你的问题
•在do和{之间还可以放什么
根据do之后的语法,必须有一个语句。因此,唯一看起来奇怪但有效的可能是放置一个标签。例如
do L1: { std::cout << "Hello do-while!" << std::endl; } while ( false );
int n = 10;
do int i = ( std::cout << --n, n ); while ( n );
考虑到您也可能使用空语句。在这种情况下
if(x.start()) do Come_Here: if(y.foo(x)) {
// Do things
}while(x.inc())
do ; while ( false );
或
还有一个有趣的声明
do One: do Two: do Three:; while ( 0 ); while ( 0 ); while ( 0 );
也在C++声明中也是语句。因此,可以在DO和I../P>之间放置声明。
比如说
do L1: { std::cout << "Hello do-while!" << std::endl; } while ( false );
int n = 10;
do int i = ( std::cout << --n, n ); while ( n );
do while语句的语法为:
在表达时做陈述
基本上,您可以将任何语句放在do关键字之后和while关键字之前。通常情况下,我们在do后面加一个花括号,以允许对多个语句进行分组(复合语句)但是如果你只想在do关键字后面放一条语句,大括号是可选的。尽管我强烈建议使用大括号来帮助可读性
在您的例子中,if块是一个完整的语句,它是完美的
下面是包含单个语句的do语句的另一个示例
int i = 0;
do std::cout<<i<<std::endl;
while (i++ < 5);
inti=0;
我认为这种缩进会引起一些混乱
我个人会这样写:
if(x.start())
do
if(y.foo(x)) {
// Do things
}
while(x.inc())
如果do后面的语句只有一行,则不需要括号。与if一样,只有在有更多指令时才使用括号。在这种情况下,括号用于if,因为do while只有一条指令,所以不使用括号
这就是我所想的,如果有人能确认会更好。根据C++14标准
§6.5迭代语句:
do statement while ( expression );
labeled-statement
expression-statement
compound-statement (also, and equivalently, called “block”):
{ statement-seq }
statement-seq:
statement
statement-seq statement
...
其中语句可以是:
§6声明:
do statement while ( expression );
labeled-statement
expression-statement
compound-statement (also, and equivalently, called “block”):
{ statement-seq }
statement-seq:
statement
statement-seq statement
...
因此,您可以将任何有效语句放在do
和while
之间
注意,在do语句中,子语句被重复执行,直到表达式的值变为false
。测试在每次执行语句之后进行。“我认为在do{}while()语句中,do部分后面必须跟有括号”不正确。C++语法不是用Backus Naur形式描述的。把它称为语法。你的习惯,放弃括号将使你陷入严重的麻烦一天。