【发布时间】:2015-02-03 19:43:18
【问题描述】:
如果我写这段代码:
const char * b = NULL;
std::cout << "Hello!" << b;
我得到这个输出:
Hello!
但是,如果我将顺序更改为:
const char * b = NULL;
std::cout << b << "Hello!";
我没有得到任何输出,所以我很好奇。
我可以猜测 cout 的
【问题讨论】:
如果我写这段代码:
const char * b = NULL;
std::cout << "Hello!" << b;
我得到这个输出:
Hello!
但是,如果我将顺序更改为:
const char * b = NULL;
std::cout << b << "Hello!";
我没有得到任何输出,所以我很好奇。
我可以猜测 cout 的
【问题讨论】:
运算符有一个前置条件:
要求:
s不得为空指针。
通过打破这个前提条件,你会导致未定义的行为。任何事情都有可能发生。
(如 cmets 中所述,在这种情况下,一种流行的实现设置了 failbit 和 badbit,这可以解释您看到的行为。但这不是您可以依赖的。)
【讨论】: