所以我有一个关于do
/while
循环的一般问题。我正在学习C++,我知道,你可以写这样的事情:做while循环与cout语句
do{
....
} while(a<10 && cout<<"message");
的一点是,我知道这是可能在C++中,但我们真的做到这一点?我的意思是,“cout
”的东西里面有那么?
所以我有一个关于do
/while
循环的一般问题。我正在学习C++,我知道,你可以写这样的事情:做while循环与cout语句
do{
....
} while(a<10 && cout<<"message");
的一点是,我知道这是可能在C++中,但我们真的做到这一点?我的意思是,“cout
”的东西里面有那么?
事实是有些人这样做(即运行功能作为条件评估的一部分)。它在shell脚本中是有意义的,但如果你不使用shell脚本,有时不清楚某些函数的返回值是什么。我无法告诉你什么是“消息”,但我确实知道如果你在循环体内写它,它会做我想要的,如果我不愿意,它会'抛弃'返回值不会使用它。为了写出更清晰的代码,其他人包括你的未来 - 我可以理解,我只会评估显然返回真/假的条件,而不是“0 /不为0”或“0/1”,这可能会有所不同不同的语言。底线是,让编译器为你提高效率,为其他人编写代码,而不是为编译器编写代码。
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。
您的“等效”代码将会输出比原始信息多一个“”信息“。 – molbdnilo
@molbdnilo可能取决于循环内的'a'发生了什么,我们不知道。无论如何,这里并不是真正的相关问题,因为我的意思是教学,但是,它们并不完全等同。 – MicroVirus
如果你想后进行输出测试条件,你需要要么做,或添加内循环的另一个条件测试和维护他们两个,这是一个错误等待发生。
do {
if (a < 10)
cout << "message";
} while (a < 10);
这是罕见的在任何情况下看到cout <<
本身不过,因为你通常可以假设它会成功,除非你的机器是着火了。
在另一方面的萃取操作者,>>
,通常的条件内所属;
while (cin >> x)
是惯用的C++。
只因为你可以不意味着你应该,这是一个很好的例子!将'cout'放在循环体中更有意义。 – Sean