在研究这个问题的示例代码时,我假设它是未定义的行为,它阻止了后续使用的std::cout
打印。但事实证明,尝试打印空指针会导致std::ios_base::badbit
并将std::ios_base::failbit
其设置为流状态,这是导致其无法运行的真正原因。因此,我现在很好奇(尝试)打印空指针是否真的是未定义的行为。所以这是我的问题:
打印空指针是未定义的行为吗?如果是这样,导致这种情况的流插入器是什么?我很确定插入器足够聪明,不会取消引用空指针。
我还想知道为什么插入器在此上下文中遇到空指针时设置其错误掩码(特别是
badbit
)。为什么不将其视为字符串文字的终止?
我手边没有标准,到目前为止,我只发现了一个不幸导致死链接的来源。