Мне было просто интересно, что произойдет, если я вызову operator<<
в std::cout
явно, потому что узнал, что a.operator()
точно такой же, как a()
. Поэтому я делаю это и печатает что-то странное:
#include <iostream>
using std::cout;
int main()
{
cout.operator<<("Hello World");
}
Output: 0x80486a0
Как ни странно, он выдает адрес (адрес может отличаться для вас, но он все равно должен быть адресом). Я думаю, что это адрес строки, поэтому я пытаюсь разыменовать ее, чтобы заставить ее выводить строку:
*( cout.operator<<("Hello World") );
Но я получаю очень длинную ошибку
no match for operator* in '*std::cout.std::basic_ostream<...
Я думаю, что это довольно странно. Ничто из определения std::cout
не привело бы меня к мысли, что это приведет к какому-либо другому поведению; также учитывая тот факт, что явно вызов операторной функции не имеет значения (или должен быть как минимум).
Так почему я получаю этот вывод? Почему я получаю адрес вместо самой строки при вызове оператора явно? Это даже адрес в памяти или просто вывоз мусора? Любые ответы приветствуются.