我经常cout在我的代码中的许多不同位置用于调试目的,然后我感到沮丧并手动评论所有这些.
有没有办法在运行时抑制cout输出?
更重要的是,假设我想要抑制所有cout输出,但我仍然希望在终端中看到1个特定输出(假设程序的最终输出).
是否可以使用""其他方式"打印到终端以显示程序输出,然后在抑制cout仍然看到使用这种"其他方式"打印的东西?
use*_*016 62
当然,你可以(例如这里):
int main() {
std::cout << "First message" << std::endl;
std::cout.setstate(std::ios_base::failbit);
std::cout << "Second message" << std::endl;
std::cout.clear();
std::cout << "Last message" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
First message
Last message
Run Code Online (Sandbox Code Playgroud)
这是因为将流置于fail状态将使其静默地丢弃任何输出,直到清除failbit.
911*_*911 18
要抑制输出,可以断开底层缓冲区与cout的连接.
#include <iostream>
using namespace std;
int main(){
// get underlying buffer
streambuf* orig_buf = cout.rdbuf();
// set null
cout.rdbuf(NULL);
cout << "this will not be displayed." << endl;
// restore buffer
cout.rdbuf(orig_buf);
cout << "this will be dispalyed." << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用cerr- 标准输出流用于调试目的的错误。
此外,还有clog- 用于记录的标准输出流。
通常,它们的行为都类似于cout.
例子:
cerr << 74 << endl;
Run Code Online (Sandbox Code Playgroud)
详情:http : //www.cplusplus.com/reference/iostream/cerr/
http://www.cplusplus.com/reference/iostream/clog/