Как происходит объединение операторов в C ++?

У меня здесь совершенно базовый вопрос о C ++.

#include <iostream>
using namespace std;

int main() {
    int a = 255;
    cout << hex << a << endl; // <-----
}

Как в приведенном выше фрагменте кода связывается оператор std :: cout ?

Я понимаю, что реализация cout вернет ссылку на cout , чтобы разрешить цепочку, поэтому он должен выполняться как:

(((cout << hex) << a) << endl)

т.е. эквивалентно им, в порядке

  1. cout << hex
  2. cout << a
  3. cout << endl

Но это не может быть так, потому что каким-то образом значение a должно быть преобразован в шестнадцатеричную форму!

Как компилятор на самом деле связывает операторы, чтобы преобразование происходило?

15
задан Lazer 4 March 2012 в 14:12
поделиться