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

Как безопасно объединить строковые литералы и объекты с помощью оператора «+»?

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

How Can You Safely Concatenate String Literals and Objects Using the \' \' Operator?

Объединение строковых литералов и объектов: изучение оператора ' '

В своей книге «Accelerated C» Кениг представляет концепцию использования оператора ' ' для объединения строк литералы и объекты. Хотя это может показаться простым, существуют тонкие нюансы, которые могут привести к неожиданным результатам.

Загадка: два примера, один успех, одна неудача

Рассмотрите следующие два примера:

const string hello = "Hello";
const string message = hello   ",world"   "!";
const string exclam = "!";
const string message = "Hello"   ",world"   exclam;

В первом примере три строки успешно объединяются. Однако второй пример терпит неудачу.

Понимание ошибки: ассоциативность оператора и оценка слева направо

Чтобы понять несоответствие, мы должны рассмотреть ассоциативность оператора ' '. Оператор '' ассоциативен слева направо, то есть он выполняет вычисления слева направо. Если это не принять во внимание, это может привести к неожиданному поведению.

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

const string message = ("Hello"   ",world")   exclam;

Как видите, сначала объединяются два строковых литерала: "Hello" и ",world". В результате получается строковый литерал, который невозможно в дальнейшем объединить со строковым объектом "exclam".

Решения: работа с поведением оператора ' '

Решить эту проблему можно несколькими способами:

  • Использование объекта std::string в качестве одного из аргументов:
const string message = string("Hello")   ",world"   exclam;
  • Явное заключение в круглые скобки для управления порядком оценки:
const string message = "Hello"   (",world"   exclam);

Почему нельзя объединить два строковых литерала?

Оператор ' ' предназначен для объединения строковых объектов, а не строковых литералов. Строковый литерал представляет собой массив символов, и при использовании в выражении он преобразуется в указатель на его начальный элемент. Добавление двух указателей, как в случае объединения строковых литералов, не допускается в C .

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

Хотя вы не можете объединять строковые литералы с помощью оператора ' ', вы можете объедините их, поместив рядом:

"Hello" ",world"

Это эквивалентно:

"Hello,world"

Это полезно для разбиения длинных строковых литералов на несколько строк.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3