使用 cout 语句执行 while 循环

Do while loop with a cout statement

所以我有一个关于 do/while 循环的一般性问题。我正在学习 C++,我知道你可以写出类似的东西:

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

关键是,我知道这在 C++ 中是可能的,但我们真的这样做了吗?我的意思是,“cout里面的东西?

你的 while 循环等同于

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

因为cout << ...又是returnscout。 那么,问题来了,写成

这样的语句是什么意思
while( cout );

if (cout) ...

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

if (cout) ...

等同于

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

do { ... }
while(cout);

等同于

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

最后,fail returns 如果流 failed to produce output 为真。

事实是有人这样做(即 运行 作为条件评估一部分的函数)。它在 shell 脚本中有意义,但如果您不使用 shell 脚本,有时不清楚某些函数的 return 值是什么。我不能直接告诉你 cout<<"message" return 是什么,但我知道如果你把它写在循环体内,它会做我想做的,它会 'throw away' return 值,如果我不使用它。

为了编写其他人(包括您未来的自己)可以理解的更清晰的代码,我只会评估显然 return true/false 而不是“0/not-0”或“0”的条件/1" 在不同的语言中可能有所不同。

底线是,让编译器为您提高效率,为其他人而不是编译器编写代码。

如果你想在测试条件后执行输出,你需要要么这样做,要么在循环中添加另一个条件测试并维护它们,这是等待发生的错误。

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

虽然在任何情况下都很少cout << 单独,因为您通常可以假设它会成功,除非您的机器着火了。

另一方面,提取 运算符 >> 通常属于条件;

while (cin >> x)

是惯用的 C++。