Объединение строковых литералов со строками
В C оператор можно использовать для объединения строк и строковых литералов. Однако у этой функциональности есть ограничения, которые могут привести к путанице.
В вопросе автор пытается объединить строковые литералы «Hello», «,world» и «!» двумя разными способами. Первый пример:
const string hello = "Hello";
const string message = hello ",world" "!";
В этом случае код компилируется и выполняется успешно. Это связано с тем, что первый операнд оператора является строковым объектом (привет), поэтому компилятор рассматривает его как объединение строки и двух строковых литералов.
Однако второй пример:
const string exclam = "!";
const string message = "Hello" ",world" exclam;
не удалось скомпилировать. Это связано с тем, что крайний левый оператор пытается объединить два строковых литерала, что запрещено. Компилятор интерпретирует этот код как:
const string message = (("Hello" ",world") exclam);
и первая конкатенация пытается добавить два указателя ( литералы const char*) вместе.
Чтобы решить эту проблему, код должен либо:
Сделать одну из первых двух объединяемых строк строковым объектом:
const string message = string("Hello") ",world" exclam;
Используйте круглые скобки, чтобы сначала вычислялось второе значение:
const string message = "Hello" (",world" exclam);
Причина, по которой вы не можете объединить два строковых литерала, заключается в том, что строковые литералы хранятся как массивы символов, которые нельзя сложить напрямую. Когда вы используете строковый литерал в большинстве контекстов, он преобразуется в указатель на его начальный элемент, который не является допустимым операндом для оператора.
Поэтому важно помнить, что только один из двух крайних левых операндов в выражении конкатенации может быть строковым литералом. Однако строковые литералы можно объединить, поместив их рядом друг с другом, например:
"Hello" ",world"
"Hello,world"
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3