Оператор +
является ассоциативным слева (вычисляется слева направо), поэтому самый левый +
вычисляется первым.
exclam
- это объект std::string
, который перегружает operator+
, так что оба следующих параметра выполняют конкатенацию:
exclam + "Hello"
"Hello" + exclam
Оба они возвращают std::string
объект, содержащий объединенную строку.
Однако, если первые две вещи, которые «добавляются», являются строковыми литералами, как в:
"Hello" + "World"
здесь не задействован объект типа класса (здесь нет std::string
). Строковые литералы преобразуются в указатели, и для указателей нет встроенного operator+
.