do-while语句的定义如下:
do statement while ( expression ) ;
因此,在do和while之间可以包含任何语句,包括if语句。
至于你的问题
•在do和{之间还能放什么?
根据语法,do后必须是语句。因此,唯一可能看起来奇怪但有效的情况是放置一个标签。例如:
do L1: { std::cout << "Hello do-while!" << std::endl; } while ( false );
因为标记语句也可以使用。
例如,您帖子中的do-while语句可以如下所示:
if(x.start()) do Come_Here: if(y.foo(x)) {
}while(x.inc())
请注意,您也可以使用空语句。在这种情况下,它看起来像
do ; while ( false );
或者
do Dummy:; while ( false );
还有一个有趣的声明
do One: do Two: do Three:
在C++中,声明也是语句。因此,您可以在do和while之间放置一个声明。
例如:
int n = 10;
do int i = ( std::cout <<
在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