Недавно я смотрел видеоролики «Введение в C ++», некоторые из которых лучше объясняют одни концепции, чем другие. Однако есть кое-что, чего не коснулось ни одно из видео, и это значение скобок-пряников.

Пример:

int main(){  

    cout << "Hello World" << endl;
    return 0;

}

Меня интересует только первая строка вышеупомянутой функции. Если я правильно понимаю, cout печатает следующую переменную или значение, а endl указывает конец строки, представляя "\n".

Я искал в Google операторы и ключевые слова C ++, и ни в одном из списков это не фигурирует, хотя << очевидно также служит двоичным оператором сдвига влево ...

Чтобы уточнить, я исхожу из фона Python / Java, поэтому я ожидал бы знака запятой или добавления. Я хочу знать, является ли << их эквивалентом или делает что-то похожее, но другое.

Спасибо.

0
Karla Miletti 13 Май 2016 в 22:19

3 ответа

Лучший ответ

В семантическом контексте потоков << называется «оператором вставки потока», а >> - «оператором извлечения потока». Синтаксически они аналогичны операторам сдвига влево и вправо, которые семантически работают на целые числа.

Из контекста Java вы должны быть знакомы с этим оператором +, который действует по-разному в зависимости от того, являются ли его аргументы целыми числами, числами с плавающей запятой или строками (хотя C ++ допускает общую перегрузку).

std::endl отличается от '\n' тем, что он также очищает поток (обратите внимание, что std::cout по умолчанию буферизуется по строкам, если он направляется на терминал).

Использование + для вывода означает, что будет создана куча ненужных временных строк, и перегрузка , (например, && или ||) будет неожиданной, поскольку она скроет встроенный смысл.

Если бы вариативные шаблоны были доступны, когда C ++ был на ранней стадии, он, вероятно, использовал бы не <<, а функцию-член.

4
o11c 13 Май 2016 в 19:26

Это не «скобки-пряники». << - оператор сдвига влево и не более того.

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

6
HolyBlackCat 13 Май 2016 в 19:23

C ++ допускает перегрузку операторов, поэтому значение << меняется в зависимости от задействованных типов. cout имеет тип ostream, который перегружает << для записи в поток.

Вот список многих из них, обратите внимание, что это не Это не полный список, потому что вы можете определять операторы вне класса ostream, как в этот пример на MSDN даты.

4
Guvante 13 Май 2016 в 19:22