2016-02-19 6 views
-2
inline uint32_t code(uint32_t reg, Writer &writer) 
{ 
    uint32_t ZIEL, LHS, RHS; 
    if(op == OP_CONJ) { 
     LHS = lhs->code(reg, writer); 
     RHS = rhs->code(LHS + 1, writer); 
     reg = RHS + 1; 
     writer << OP_CONJ << reg << LHS << RHS; 

... 

Может кто-нибудь может помочь мне понять, что такое «< <»?C++: Что делает этот знак «<<»?

Вот Writer структура:

struct Writer { 
    std::ostream &os; 
    inline Writer(std::ostream &_os) : os(_os) { } inline Writer &operator<<(uint32_t val) { 
     os.write((const char*)&val, sizeof(uint32_t)); 
     return *this; 
    } 
+1

Это может помочь: http://www.cplusplus.com/doc/tutorial/basic_io/ – jasonszhao

ответ

1

В C++ оператор < < используется в выходных потоков в то время как оператор >> используется для входных потоков.

Пример использования:

int number; 
cin >> number; 
cout << number; 

Приведенный выше код при вставке в программу, которая использует пространство имен станд принимает значения числа с клавиатуры и выводит это значение на экране.

3

В коде вы выложили эффект << определяется как

os.write((const char*)&val, sizeof(uint32_t)) 

где os является ссылка на поток, инициализирован в коде, не показано.

I.e. он пытается записать байты значения, raw, в поток.

Надеюсь, этот поток находится в двоичном режиме, а не в текстовом режиме, иначе на некоторых системах (в частности Windows) данные могут быть изменены по пути.

Это нетрадиционный использование <<. Обычно в C++ << либо

  • сдвиг влево (первоначальное значение от C), или

  • форматированный вывод (с преобразованием в текст), или

  • добавления значения в коллекции.

С использованием, как в коде показано, а что называется Writer, можно было бы ожидать, форматированный вывод, а не двоичный выход.

0

Это перегрузка оператора <<. В принципе, это функция с именем <<.При вызове этой функции с помощью <<, C++ установит аргумент значение рядом с этим символом:

writer << 8; 

как бы вы назвали функцию примерно так:

writer.<<(8); // Which won't run, but you get the idea 

На самом деле, вы можете позвонить операционная функция выглядит следующим образом:

writer.operator<<(8); 
Смежные вопросы