cout流变坏了

时间:2014-07-21 06:50:30

标签: c++ c++11 initializer-list

我只是尝试这个示例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;
}

1 个答案:

答案 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不应为空指针。