带开放模式ios_base :: out的istringstream有什么意义?

时间:2019-05-04 20:12:30

标签: c++ stringstream

istringstream构造函数参数openmode的用途是什么?

由于我认为该对象从不支持流插入ios_base::out运算符,因此特别需要指定<<吗?

1 个答案:

答案 0 :(得分:1)

具有ios_base::in访问模式的流不支持任何输出操作。如果未指定ios_base::out,则更改序列的方法将失败。

来自cppreference

  

打开模式:内部stringbuf对象提供对其内部字符序列的访问。

     

ios_base::out-输出-序列支持输出操作

     始终为ios_base::in个对象设置

istringstream(即使未在which参数中明确设置)。   请注意,即使istringstream是输入流,也可以将其内部stringbuf对象设置为也支持输出操作。这会影响某些操作,例如putback,可能会istringstream中的某些操作更改序列的内容。

请参见putback example

        std::istringstream s1("Hello, world", std::ios_base::out); //  stream supporting output operations
        s1.get();
        if (s1.putback('Y')) // modifies the buffer
            std::cout << s1.rdbuf() << '\n';
        else
            std::cout << "putback failed\n";

        std::istringstream s2("Hello, world"); // input-only stream
        s2.get();
        if (s2.putback('Y')) // cannot modify input-only buffer
            std::cout << s2.rdbuf() << '\n';
        else
            std::cout << "putback failed\n";

        s2.clear();
        if (s2.putback('H')) // non-modifying putback is OK
            std::cout << s2.rdbuf() << '\n';
        else
            std::cout << "putback failed\n";