我只是尝试这个示例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;
}
答案 0 :(得分:4)
int8_t* c{};
您已将c
初始化为nullptr
。
最有可能int8_t
是您平台上(signed) char
的简介。在这种情况下,您的示例中有未定义的行为,因为您违反了operator<<
重载的要求(signed) char const *
,这要求指针不为空。
来自§27.7.3.6.4/ 3 [ostream.inserters.character]
要求: s不应为空指针。