编译器将cout'ing抛出循环

时间:2012-03-13 09:16:13

标签: c++ compiler-optimization

我写了一个数值模拟,作为一个调整,我想添加一些基本的进度条。 在主循环中我写道:

if(particles.t>=pr*maxtime){
   cout << "|";
   pr+=0.01;
 }

其中pr从0.01开始。所以,基本上它应该是一百个“|”在计算过程中。而不是它吹嘘这些“|”在模拟结束时,一次全部。

当我将此代码修改为:

if(particles.t>=pr*maxtime){
   cout << pr << "\n";
   pr+=0.01;
 }

它可以正常工作。

我想这与优化有关,我正在使用g ++编译我的代码,使用选项-Wall和-lm。我之前用C#编写的代码就是这样的代码。

2 个答案:

答案 0 :(得分:4)

问题在于缓冲输出。每次打印后放置cout.flush();,问题应该解决。

答案 1 :(得分:1)

cout(以及许多其他流)的写入进行缓冲。如果要立即显示它们,则需要刷新流:

if(particles.t>=pr*maxtime){
    cout << "|";
    cout.flush();
    pr+=0.01;
}