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

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

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

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

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

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

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

10

Решение

Одинарный + может применяться к значениям арифметического типа, значениям перечисления с незаданной областью и значениям указателя, потому что …

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

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

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


«Операнд унарного + оператор должен иметь арифметическое, перечисление с незаданной областью или тип указателя и
Результатом является значение аргумента. Интегральное продвижение выполняется для целочисленных или перечислимых операндов.
Тип результата — это тип повышенного операнда ».

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]