std::unitbuf, std::nounitbuf

来自cppreference.com
< cpp‎ | io‎ | manip

定义于头文件 <ios>
std::ios_base& unitbuf( std::ios_base& str );
(1)
std::ios_base& nounitbuf( std::ios_base& str );
(2)
启用或禁用任何输出操作后,自动冲洗的输出流。有没有对输入的影响.
原文:
Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
1)
流中的unitbuf如果通过调用str使str.setf(std::ios_base::unitbuf)标志
原文:
enables the unitbuf flag in the stream str as if by calling str.setf(std::ios_base::unitbuf)
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
2)
如果通过调用unitbuf禁用流中的strstr.unsetf(std::ios_base::unitbuf)标志
原文:
disables the unitbuf flag in the stream str as if by calling str.unsetf(std::ios_base::unitbuf)
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
这是一个I / O操纵器,它可被称为与表达式如out << std::unitbuf类型out任何std::basic_ostream,或与一个表达式如in >> std::unitbuf类型in任何std::basic_istream.
原文:
This is an I/O manipulator, it may be called with an expression such as out << std::unitbuf for any out of type std::basic_ostream or with an expression such as in >> std::unitbuf for any in of type std::basic_istream.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

目录

[编辑] 注释

法拉盛std::basic_ostream::sentry对象的析构函数中进行,这就要求str.rdbuf()->pubsync()如果str.flags() & std::ios_base::unitbuf == true.
原文:
Flushing is performed in the destructor of the std::basic_ostream::sentry object, which calls str.rdbuf()->pubsync() if str.flags() & std::ios_base::unitbuf == true.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
标准输出的对象std::cerrstd::wcerrunitbuf位设置在默认情况下.
原文:
The standard output objects std::cerr and std::wcerr have their unitbuf bit set by default.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 参数

str -
参考I / O流
原文:
reference to I/O stream
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 返回值

str(参考操作后到流)
原文:
str (reference to the stream after manipulation)
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 示例

不带std :: unitbuf的或其他明确冲洗的,输出是相同的,但不会出现在实时.
原文:
Without std::unitbuf or another explicit flush, the output is the same, but does not appear in real time.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

#include <iostream>
#include <chrono>
template<typename Diff>
void log_progress(Diff d)
{
    std::cout << "..("
              << std::chrono::duration_cast<std::chrono::milliseconds>(d).count()
              << " ms)..";
}
int main()
{
    volatile int sink=0;
    std::cout << std::unitbuf; // enable automatic flushing
 
    auto t1 = std::chrono::high_resolution_clock::now();
    for(int j=0; j<5; ++j)
    {
        for(int n=0; n<10000; ++n)
            for(int m=0; m<20000; ++m)
                sink += m*n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
    std::cout << '\n';
}

输出:

..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..

[编辑] 另请参阅

冲入输出流
(函数模板) [编辑]
输出 '\n' 并冲入输出流
(函数模板) [编辑]