Cout和Hex [C ++]

时间:2014-04-11 16:22:40

标签: c++

为什么当你写两次std :: cout时,它会显示十六进制值,然后显示你想输出的内容?

E.g。

std::cout << std::cout << "Hello!";

2 个答案:

答案 0 :(得分:2)

std::cout的类型为std::ostream(或者来自的<< 它)。没有std::ostream在右侧采用此类型,所以 编译器寻找转换。在pre-C ++ 11中, void*隐式转换为std::ostream(用于... 条件),所以编译器使用这个;你所看到的是什么 转换运算符返回的输出(通常, {{1}}对象本身的地址,但所有这些都是 要求是它是一个非空指针)。

答案 1 :(得分:0)

std::ostream有一个转化运算符,允许转换为void*,因此您可以测试操作是否成功。在表达

std::cout << std::cout  // similar to 
                        // std::cout.operator<<( std::cout.operator  void*())

右侧操作数表达式std::cout使用此转化运算符隐式转换为void const*,然后operator<< does the output of this via the ostream operand。另一种看待这种情况的方法是:

const void* cp = std::cout.operator  void*();
std::cout << cp << "Hello!" << std::endl;
std::cout << std::cout << "Hello!";

输出:

0x601088Hello!

0x601088Hello!