Thr*_*iag 7 c++ control-structure do-while
我目前正在处理某人的其他代码,并有这样的声明
if(x.start()) do if(y.foo(x)) {
// Do things
}while(x.inc())
Run Code Online (Sandbox Code Playgroud)
这里x
是自定义类,它包含信息y
并允许以特殊顺序迭代其元素.如果相关,我会提供此信息,但我的问题更为笼统:
我认为在一个 do{}while()
声明中该do
部分必须跟随括号,并且这个最后while()
条件的togheter 定义了do-while循环.
if
后do
呢?do
和{
?我找不到与此相关或谷歌相关的其他问题,大多数内容与将if
语句放入内容有关while loop
.
语法允许和之间的任何声明.只是你通常会在那里看到一种特殊形式的陈述 - 复合语句,通常也称为块.do
while
{ /* statements */ }
代码的do-while部分完全等同于
do {
if(y.foo(x)) {
// Do things
}
} while(x.inc());
Run Code Online (Sandbox Code Playgroud)
do-while语句按以下方式定义
do statement while ( expression ) ;
Run Code Online (Sandbox Code Playgroud)
所以在do和while之间可以有任何语句,包括if语句.
至于你的问题
•在和{之间可以放入什么?
根据语法后做必须有一个声明.因此,唯一可能看起来很奇怪但有效的可能性是放置标签.例如
do L1: { std::cout << "Hello do-while!" << std::endl; } while ( false );
Run Code Online (Sandbox Code Playgroud)
因为也可以使用带标签的陈述.
例如,帖子中的do-while语句可能看起来像
if(x.start()) do Come_Here: if(y.foo(x)) {
// Do things
}while(x.inc())
Run Code Online (Sandbox Code Playgroud)
考虑到您也可以使用空语句.在这种情况下,它看起来像
do ; while ( false );
Run Code Online (Sandbox Code Playgroud)
要么
do Dummy:; while ( false );
Run Code Online (Sandbox Code Playgroud)
还有一个有趣的说法
do One: do Two: do Three:; while ( 0 ); while ( 0 ); while ( 0 );
Run Code Online (Sandbox Code Playgroud)
同样在C++声明中也是语句.所以你可以在do和while之间放置一个声明.
例如
int n = 10;
do int i = ( std::cout << --n, n ); while ( n );
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
程序输出是
1 2 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5670 次 |
最近记录: |