后,如果我写这样的代码:忽略参数NULL
const char * b = NULL;
std::cout << "Hello!" << b;
我得到这样的输出:
Hello!
不过,如果我更改为:
const char * b = NULL;
std::cout << b << "Hello!";
我得不到任何输出,所以我很好奇。
我猜可能是cout的< <运算符读取直到NULL,所以它后面的所有内容都会被忽略,但是不知道是否有人可以给我更多关于它的信息。
后,如果我写这样的代码:忽略参数NULL
const char * b = NULL;
std::cout << "Hello!" << b;
我得到这样的输出:
Hello!
不过,如果我更改为:
const char * b = NULL;
std::cout << b << "Hello!";
我得不到任何输出,所以我很好奇。
我猜可能是cout的< <运算符读取直到NULL,所以它后面的所有内容都会被忽略,但是不知道是否有人可以给我更多关于它的信息。
经营者有一个前提条件:
要求:
s
不得空指针。
通过打破此前提条件,您会导致未定义的行为。什么事情都可能发生。
(如在评论中提到,一个流行的实现将在这种情况下,这可以解释你看到的行为failbit
和badbit
但是,这不是你可以依靠。)
[而且,实际上,GCC(而不是libstdC++)设置badbit ](http://stackoverflow.com/a/7019483/560648)。 – 2014-12-05 15:32:08
@LightnessRacesinOrbit:这很有趣,并解释了观察到的行为。但绝对不能依赖。 – 2014-12-05 15:33:16
[它也会在GCC上设置'badbit'](http://ideone.com/B06vm0) – 0x499602D2 2014-12-05 15:35:40
的可能重复:是印刷一个空指针未定义的行为?](http://stackoverflow.com/questions/23283772/is-printing-a-null-pointer-undefined-behavior) – 0x499602D2 2014-12-05 15:32:30