所以我对do
/ while
循环有一般性问题。我正在学习C ++,我知道你可以写出类似的东西:
do{
....
} while(a<10 && cout<<"message");
关键是,我知道这在c ++中是可行的,但我们真的这样做吗?我的意思是,“cout
”内容在里面?
答案 0 :(得分:8)
你的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,则fail
返回true。
答案 1 :(得分:3)
事实是有些人这样做(即作为条件评估的一部分运行功能)。它在shell脚本中是有意义的,但是如果你没有使用shell脚本,有时候不清楚某些函数的返回值是什么。我无法告诉你什么cout&lt;&lt;“message”返回,但我知道如果你在循环体内写它,它会做我想要的,并且如果我将它“扔掉”返回值不要使用它。
要编写包括你的未来在内的其他人可以理解的清洁代码,我只会评估明显返回true / false的条件,而不是“0 / not-0”或“0/1”,这些条件可能会有所不同语言。
最重要的是,让编译器为您提高效率,为其他人提供代码,而不是编译器。
答案 2 :(得分:0)
如果你想在测试条件之后执行输出,你需要这样做或者在循环中添加另一个条件测试并维护它们,这是一个等待发生的错误
do {
if (a < 10)
cout << "message";
} while (a < 10);
在任何情况下都很少看到cout <<
,因为你通常会认为它会成功,除非你的机器着火。
另一方面,提取运算符>>
通常属于一个条件;
while (cin >> x)
是惯用的C ++。