2015-11-05 138 views
5

所以我有一个关于do/while循环的一般问题。我正在学习C++,我知道,你可以写这样的事情:做while循环与cout语句

do{ 
.... 
} while(a<10 && cout<<"message"); 

的一点是,我知道这是可能在C++中,但我们真的做到这一点?我的意思是,“cout”的东西里面有那么?

+1

只因为你可以不意味着你应该,这是一个很好的例子!将'cout'放在循环体中更有意义。 – Sean

回答

3

事实是有些人这样做(即运行功能作为条件评估的一部分)。它在shell脚本中是有意义的,但如果你不使用shell脚本,有时不清楚某些函数的返回值是什么。我无法告诉你什么是“消息”,但我确实知道如果你在循环体内写它,它会做我想要的,如果我不愿意,它会'抛弃'返回值不会使用它。为了写出更清晰的代码,其他人包括你的未来 - 我可以理解,我只会评估显然返回真/假的条件,而不是“0 /不为0”或“0/1”,这可能会有所不同不同的语言。底线是,让编译器为你提高效率,为其他人编写代码,而不是为编译器编写代码。

7

while循环相当于

do { 
    ... 
    cout << "message"; 
while(a < 10 && cout); 

因为cout << ...再次返回cout。 然后,问题是,这是什么意思写之类的语句

while(cout); 

if (cout) ... 

cout对象有哪些,这里使用的conversion to boolean。它的实现是检查!fail(),所以

if (cout) ... 

相当于

if (!cout.fail()) ... 

do { ... } 
while(cout); 

相当于

do { ... } 
while(!cout.fail()); 

最后,如果数据流为failed to produce output,则返回true。

+1

您的“等效”代码将会输出比原始信息多一个“”信息“。 – molbdnilo

+0

@molbdnilo可能取决于循环内的'a'发生了什么,我们不知道。无论如何,这里并不是真正的相关问题,因为我的意思是教学,但是,它们并不完全等同。 – MicroVirus

0

如果你想后进行输出测试条件,你需要要么做,或添加内循环的另一个条件测试和维护他们两个,这是一个错误等待发生。

do { 
    if (a < 10) 
     cout << "message"; 
} while (a < 10); 

这是罕见的在任何情况下看到cout <<本身不过,因为你通常可以假设它会成功,除非你的机器是着火了。

在另一方面的萃取操作者,>>,通常的条件内所属;

while (cin >> x) 

是惯用的C++。