C++ 中'cout<<cout'和'cout<<&cout'的区别?

Difference between 'cout<<cout' and 'cout<<&cout' in c++?

本文关键字:lt cout 区别 C++      更新时间:2023-10-16

我想知道c++cout<<coutcout<<&cout的实际差异?在我的编译器cout<<cout返回0x477864 &cout<<&cout在任何时候都返回0x477860。它显示它们之间有一个数字的差。这些的意义是什么?

当你这样做的时候:

cout << cout;

依赖于流对void*的隐式转换。该值用于(c++11之前)测试流的状态。它没有指定实际值是什么,如果流处于失败状态,它只需要为NULL,否则为非NULL。也许它返回的是对象成员的地址,但这并不重要,它是实现定义的。

当你这样做的时候:

cout << &cout;

获取cout的实际地址

请注意,在c++ 11及以后的版本中,第一个cout << cout;将不再编译,因为到void*的隐式转换不再存在。相反,可以显式地转换为bool来达到相同的目的。