溪水变坏了

cout stream goes bad

本文关键字:坏了      更新时间:2023-10-16

我只是在尝试这个示例c++ 11代码,并意识到cout流坏了,我必须明确地清除坏/失败位,为最后一个cout语句打印。

有人经历过吗??还是我错过了什么??

#include <cstdint>
#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int8_t* c{};
    cerr << boolalpha << (!cout) << endl;
    cout << c << endl;
    cerr << boolalpha << (!cout) << endl;
    //cout.clear(); //Why does cout go bad??
    int16_t arr[] {1, 2, 3, 4, 5};
    cout << "arr size: " << sizeof(arr)/sizeof(arr[0]) << endl;
    return 0;
}
int8_t* c{};

这里你已经将c初始化为nullptr

很可能int8_t是您平台上(signed) char的类型定义。在这种情况下,您在示例中有未定义的行为,因为您违反了接受(signed) char const *operator<<重载的要求,这要求指针不能为空。

从<<p> em>§27.7.3.6.4/3 [ostream.inserters.character]

要求: s不能是空指针。