+
Оператор + склеивает строки и другие значения в новый объект String, не изменяя исходные — результат нужно явно сохранить в переменную.
Полная статья
Описание
Оператор + позволяет склеить несколько строк или строку с числом, символом и другими совместимыми значениями — и получить на выходе новый объект String. Исходные переменные при этом остаются нетронутыми: результат нужно явно сохранить в новую переменную или присвоить обратно одной из исходных.
Синтаксис
myString3 = myString1 + myString2
Параметры
myString1: первый объектString— левый операнд.myString2: второй объектStringили любое значение, которое Arduino умеет неявно преобразовать в строку (число, символ и т. п.).myString3: переменная, в которую записывается результат конкатенации.
Возвращает
Новый объект String, содержащий текст обоих операндов, соединённый без разделителя.
Где применяется
- Формирование строки для отправки через
Serial.println(): объединение метки и числового значения датчика. - Сборка команд или ответов для связи по UART, Bluetooth или Wi-Fi.
- Подготовка строк для вывода на дисплей: объединение нескольких фрагментов перед вызовом
lcd.print(). - Построение URL-адресов или HTTP-заголовков в сетевых скетчах.
Практические замечания
- Каждый вызов оператора
+создаёт временный объектStringв куче. Если конкатенация происходит часто и строки разного размера, SRAM может фрагментироваться, что со временем приводит к непредсказуемым сбоям. - Если строка собирается по частям в цикле, заранее выделите память с помощью
reserve()— это снизит количество перераспределений и уменьшит фрагментацию. - Помните: исходные объекты
myString1иmyString2не изменяются. Если нужно обновить одну из них, используйте присваивание видаmyString1 = myString1 + myString2или сокращённый оператор+=. - На платах с малым объёмом SRAM (например, Arduino Uno с 2 КБ) злоупотребление конкатенацией — одна из самых частых причин зависания скетча без явной ошибки компилятора.
- Если результат конкатенации не сохранён ни в одну переменную, временный объект сразу уничтожается — убедитесь, что
myString3действительно получает значение.