Я читаю Accelerated C ++ от Koenig. Он пишет, что «новая идея состоит в том, что мы можем использовать + для объединения строки и строкового литерала - или, если на то пошло, двух строк (но не двух строковых литералов).
Хорошо, я полагаю, это имеет смысл. Теперь о двух отдельных упражнениях, призванных прояснить это.
Верны ли следующие определения?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Теперь я попытался выполнить описанное выше, и это сработало! Так что я был счастлив.
Затем я попытался сделать следующее упражнение;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Это не сработало. Теперь я понимаю, что это как-то связано с тем фактом, что вы не можете объединить два строковых литерала, но я не понимаю семантической разницы между тем, почему мне удалось заставить работать первый пример (это не «, world» и «! «два строковых литерала? Разве это не должно было работать?), но не второй.
"Hello" + ", world!"
если ты можешь "Hello, world!"
. Как обычно, в C ++ есть удивительный и простой способ решения предполагаемой проблемы. :-)
"Hello" ", world!"
(без +
). К C ++ можно предъявить ряд претензий, но я не думаю, что его рассмотрение здесь - одна из них. Это точно так же, как если бы вы писали 1 / 3 + 1.5
и жаловались, потому что разделение было целым. Хорошо это или плохо, но так работает большинство языков.
"hello" " world" == "hello world"
полезна, если вам нужно написать длинную строку и вы не хотите, чтобы она выходила из вашего окна, или если вы хотите быть в пределах некоторого ограничения длины строки. Или если одна из строк определена в макросе.
const string message = "Hello" ",world" + exclam
(например, пропуская первое+
), все будет работать нормально.