What's the difference between cout<<cout and cout<<&cout in c++?

后端 未结 5 1660
余生分开走
余生分开走 2020-12-06 02:59

This might be a beginner question and understanding how cout works is probably key here. If somebody could link to a good explanation, it would be great. cout<

相关标签:
5条回答
  • 2020-12-06 03:18

    As already stated, cout << cout uses the void* conversion provided for bool testing (while (some_stream){ ... }, etc.)

    It prints the value &cout + 4 because the conversion is done in the base implementation, and casts to its own type, this is from libstdc++:

    operator void*() const
    { return this->fail() ? 0 : const_cast<basic_ios*>(this); }
    
    0 讨论(0)
  • 2020-12-06 03:20

    cout << &cout is passing cout the address of cout.

    cout << cout is printing the value of implicitly casting cout to a void* pointer using its operator void*.

    0 讨论(0)
  • 2020-12-06 03:25

    cout << cout is using the built-in conversion to void* that exists for boolean test purposes. For some uninteresting reason your implementation uses an address that is 4 bytes into the std::cout object. In C++11 this conversion was removed, and this should not compile.

    cout << &cout is printing the address of the std::cout object.

    0 讨论(0)
  • 2020-12-06 03:26

    cout << cout is equivalent to cout << cout.operator void *(). This is the idiom used before C++11 to determine if an iostream is in a failure state, and is implemented in std::ios_base; it usually returns the address of static_cast<std::ios_base *>(&cout).

    cout << &cout prints out the address of cout.

    Since std::ios_base is a virtual base class of cout, it may not necessarily be contiguous with cout. That is why it prints a different address.

    0 讨论(0)
  • 2020-12-06 03:29

    cout<<&cout is passing the address of cout to the stream.

    0 讨论(0)
提交回复
热议问题