为什么写入空std::istringstream.rdbuf()会设置失败位? 我已经学会了,我可以通过输出ISTRAMS的RDBUFF()来复制C++ STD::ISTrAM到C++ STD::OFROW。我用了好几次,效果很好

为什么写入空std::istringstream.rdbuf()会设置失败位? 我已经学会了,我可以通过输出ISTRAMS的RDBUFF()来复制C++ STD::ISTrAM到C++ STD::OFROW。我用了好几次,效果很好,c++,iostream,C++,Iostream,今天我遇到了麻烦,因为如果std::istream为空(至少对于std::istringstream),该操作会设置badbit。我已经编写了以下代码来演示我的问题: #include <stdio.h> #include <sstream> int main(int argc, char *argv[]) { std::ostringstream ss; ss << std::istringstream(" ").rdbuf(); //

今天我遇到了麻烦,因为如果std::istream为空(至少对于std::istringstream),该操作会设置badbit。我已经编写了以下代码来演示我的问题:

#include <stdio.h>
#include <sstream>

int main(int argc, char *argv[])
{
    std::ostringstream ss;

    ss << std::istringstream(" ").rdbuf(); // this does not set failbit
    printf("fail=%d\n", ss.fail());

    ss << std::istringstream("").rdbuf(); // why does this set failbit ???
    printf("fail=%d\n", ss.fail());
}
#包括
#包括
int main(int argc,char*argv[])
{
std::ostringstream ss;

ssostream::operator的文档
#include <stdio.h>
#include <sstream>

int main(int argc, char *argv[])
{
    std::ostringstream out;
    std::istringstream in("");
    while (in)
    {
        char Buffer[4096];
        in.read(Buffer, sizeof(Buffer));
        out.write(Buffer, in.gcount());
    }
    printf("fail=%d\n", out.fail());
}
   * end-of-file occurs on the input sequence;
   * inserting in the output sequence fails (in which case the character to be inserted is not extracted);
   * an exception occurs (in which case the exception is caught).