结束是否刷新缓冲区

时间:2016-01-07 06:47:04

标签: c++ io

目前我正在自学C ++。
C ++入门说:

set wbDash = workbooks.open(FileName:=(DashLocBox.Value + DashNameBox.Value + ".xlsm"), password:=PW1Box.Value, readonly:=True)

然而,C ++标准库第二版说:

cout << "hi!" << ends; //writes hi and a null, then flushes the buffer

cplusplus上的引用也没有提到刷新缓冲区 那么我应该遵循哪一个?

2 个答案:

答案 0 :(得分:5)

摘自C ++ 2011 27.7.3.8

namespace std {
  template <class charT, class traits>
    basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}
     

效果:调用os.put(os.widen(’\n’)),然后调用os.flush()。返回:os

namespace std {
  template <class charT, class traits>
  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
}
     

效果:在输出序列中插入空字符:调用os.put(charT())。返回:os

标准非常明确,std::endl会刷新流,而std::ends则不会。

答案 1 :(得分:2)

标准说(§27.7.3.8):

namespace std {
  template <class charT, class traits>
  basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
}
     

效果:在输出序列中插入一个空字符:调用os.put(charT())

cppreference对于这些事情是一个很好的参考:

  

std::endl不同,此操​​纵器不会刷新流。