2014-12-05 231 views
0

后,如果我写这样的代码:忽略参数NULL

const char * b = NULL; 
std::cout << "Hello!" << b; 

我得到这样的输出:

Hello!

不过,如果我更改为:

const char * b = NULL; 
std::cout << b << "Hello!"; 

我得不到任何输出,所以我很好奇。

我猜可能是cout的< <运算符读取直到NULL,所以它后面的所有内容都会被忽略,但是不知道是否有人可以给我更多关于它的信息。

+0

的可能重复:是印刷一个空指针未定义的行为?](http://stackoverflow.com/questions/23283772/is-printing-a-null-pointer-undefined-behavior) – 0x499602D2 2014-12-05 15:32:30

回答

4

经营者有一个前提条件:

要求:s不得空指针。

通过打破此前提条件,您会导致未定义的行为。什么事情都可能发生。

(如在评论中提到,一个流行的实现将在这种情况下,这可以解释你看到的行为failbitbadbit但是,这不是你可以依靠。)

+2

[而且,实际上,GCC(而不是libstdC++)设置badbit ](http://stackoverflow.com/a/7019483/560648)。 – 2014-12-05 15:32:08

+0

@LightnessRacesinOrbit:这很有趣,并解释了观察到的行为。但绝对不能依赖。 – 2014-12-05 15:33:16

+0

[它也会在GCC上设置'badbit'](http://ideone.com/B06vm0) – 0x499602D2 2014-12-05 15:35:40