«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему конкатенация строк с использованием + не удалась со строковыми литералами?

Почему конкатенация строк с использованием + не удалась со строковыми литералами?

Опубликовано 5 ноября 2024 г.
Просматривать:253

Why Did String Concatenation Using   Fail with String Literals?

Объединение строковых литералов со строками

В 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"
Заявление о выпуске Эта статья перепечатана по адресу: 1729729822. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3