Необычное использование оператора <<... не сдвиг ли это?
Просматривая пример кода SDFS, я увидел следующее:
static ArduinoOutStream cout(Serial);
// F сохраняет строки во флэш-памяти для экономии оперативной памяти
cout << F("\ntype any character to start\n");
Что такое << что делать в этом случае? Более того, F, похоже, никогда не определялся до этого. Кажется, это полезный трюк, но я не понимаю, как он работает.
Полный код доступен здесь: https://github.com/greiman/SdFs/ blob/master/examples/SdInfo/SdInfo.ino
@Bo Thompson, 👍1
2 ответа
Лучший ответ:
Что такое << что делать в этом случае?
Он направляет данные в устройство вывода (поток).
- http://www.cplusplus.com/doc/tutorial/basic_io/
Да, использование одних и тех же символов для разных целей сбивает с толку...
Более того, F, похоже, никогда не определялся до этого.
F()
— это макрос. Он определяется ядром Arduino в WString.h:
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
Чтобы устранить путаницу с оператором битового сдвига;
Он действительно обычно используется в качестве арифметического оператора для побитового сдвига, но кажется «перегруженным», поэтому при использовании с потоками он является «оператором вставки».
В частности, перегрузки вставки и извлечения потока оператор<< и оператор>> возвращает T&.
https://en.cppreference.com/w/cpp/language/operator_arithmetic
По сути, существует два определения слова «<<» операторная функция:
function <<(integer){//Сдвиг битов}
function <<(stream){//Присоединиться к потокам}
- Пытаюсь прошить ESP8266 с помощью Arduino UNO
- Создать новый серийный класс, наследующий от Stream
- EEPROM.get возвращает неверные данные
- Коммутатор потоков с несколькими последовательными портами
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
Спасибо. В вашей последней строке используются символы < и >, которые я никогда не видел, вместе с указателем. Кажется, это не логические или арифметические операторы, так как мне их называть в поиске Google, чтобы понять ваш ответ?, @Bo Thompson
@BoThompson это шаблон <параметры>, @esoterik
Как бы вы назвали этот набор символов по сравнению с логическим оператором < и арифметическим оператором <?, @Bo Thompson