Унарный плюс (+) против строковой строки

Сегодня я написал выражение:

"<" + message_id + "@" +  + ">"

и удивился, что он действительно скомпилирован. (PS message_id - это QString, он также будет работать с std::string)

Я часто делаю такие вещи, не использую переменную, поскольку я работаю, и я ожидаю, что компилятор скажет мне, где я все еще пропускаю записи. Финал выглядел бы примерно так:

"<" + message_id + "@" + network_domain + ">"

Теперь я хотел бы знать, почему + унарный оператор действителен для строкового литерала!?

Ответ 1

Унарный + может быть применен к значениям арифметического типа, значениям нумерации без привязки и значениям указателя, потому что...

стандарт С++ определяет его таким образом, в С++ 11 §5.3.1/7.

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

Всегда полезно взглянуть на документацию, когда кто-то задается вопросом о функциональности чего-то.


"Операнд унарного оператора + должен иметь арифметическое, неперечисленное перечисление или тип указателя, а результатом является значение аргумента. Интегральное продвижение выполняется на интегральных или перечисляющих операндах. Тип результата - это тип продвинутого операнда.