使用cout语句执行while循环

Do while loop with a cout statement

本文关键字:while 循环 执行 语句 cout 使用      更新时间:2023-10-16

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

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

关键是,我知道这在c++中是可能的,但我们真的这么做了吗?我的意思是,"cout"的东西里面的时候?

while循环等效于

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

因为CCD_ 4再次返回CCD_。那么,问题是,写这样的语句意味着什么

while( cout );

if (cout) ...

cout对象具有到布尔值的转换,此处使用该转换。它的实现是检查!fail(),所以

if (cout) ...

相当于

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

do { ... }
while(cout);

相当于

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

最后,如果流未能产生输出,则fail返回true。

事实是有些人会这样做(即运行函数作为条件评估的一部分)。这在shell脚本中是有意义的,但如果您不使用shell脚本,有时会不清楚某些函数的返回值是什么。我无法告诉你<"message"会立即返回,但我知道如果你把它写在循环体中,它会做我想做的事情,如果我不使用它,它会"丢弃"返回值。

为了编写其他人(包括你未来的自己)能够理解的更干净的代码,我只会评估明显返回true/false的条件,而不是不同语言中可能不同的"0/not-0"或"0/1"。

最重要的是,让编译器为您提高效率,为其他人而不是编译器编写代码。

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

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

然而,在任何情况下都很少看到cout <<本身,因为你通常可以假设它会成功,除非你的机器着火了。

另一方面,提取算子>>通常属于条件内部;

while (cin >> x)

是惯用的C++。