所以我对do/ whileloop 有一个普遍的问题.我正在学习C++,我知道你可以这样写:
do{
....
} while(a<10 && cout<<"message");
Run Code Online (Sandbox Code Playgroud)
关键是,我知道这在c ++中是可行的,但我们真的这样做吗?我的意思是," 内部的cout东西" ?
你的while循环相当于
do {
...
cout << "message";
while(a < 10 && cout);
Run Code Online (Sandbox Code Playgroud)
因为又cout << ...回来cout了.然后,问题是,编写语句是什么意思
while( cout );
Run Code Online (Sandbox Code Playgroud)
要么
if (cout) ...
Run Code Online (Sandbox Code Playgroud)
该cout对象具有到此处使用的布尔值的转换.它的实现是检查!fail(),所以
if (cout) ...
Run Code Online (Sandbox Code Playgroud)
相当于
if (!cout.fail()) ...
Run Code Online (Sandbox Code Playgroud)
和
do { ... }
while(cout);
Run Code Online (Sandbox Code Playgroud)
相当于
do { ... }
while(!cout.fail());
Run Code Online (Sandbox Code Playgroud)
最后,fail如果流无法生成输出,则返回true .
事实上,有些人这样做(即运行一个函数作为条件评估的一部分)。这在 shell 脚本中是有意义的,但如果您不使用 shell 脚本,有时不清楚某些函数的返回值是什么。我无法告诉你 cout<<"message" 立即返回什么,但我确实知道,如果你将它写在循环体中,它会执行我想要的操作,并且如果我不这样做,它会“丢弃”返回值不要使用它。
为了编写其他人(包括未来的自己)可以理解的更清晰的代码,我只会评估明显返回真/假的条件,而不是“0/not-0”或“0/1”,这在不同的语言中可能有所不同。
底线是,让编译器为您提高工作效率,并为其他人而不是编译器编写代码。