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)) {
// 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