Я читаю прискорений C ++ від Koenig. Він пише, що "нова ідея полягає в тому, що ми можемо використовувати + для об'єднання рядка і літерального рядка - або, з цього приводу, двох рядків (але не двох рядкових літералів).
Чудово, я думаю, це має сенс. Тепер на дві окремі вправи, призначені для висвітлення цього.
Чи справедливі наступні визначення?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Тепер я спробував виконати вищесказане, і це спрацювало! Тож я був щасливий.
Потім я спробував зробити наступну вправу;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Це не вийшло. Тепер я розумію, що це має щось спільне з тим, що ви не можете об'єднати два рядкові літерали, але я не розумію семантичної різниці між тим, чому мені вдалося отримати перший приклад для роботи (не ", світ" і "! "два рядкові літерали? Не повинно це працювати?), але не другий.
"Hello" + ", world!"
коли ти можеш це зробити "Hello, world!"
. Як звичайно, C ++ має приголомшливий і простий спосіб вирішення проблеми. :-)
"Hello" ", world!"
(без цього +
). Існує ряд скарг на C ++, але я не думаю, що це обробка тут одна з них. Це абсолютно те саме, що ви писали 1 / 3 + 1.5
, і скаржилися, оскільки поділ був цілісним поділом. На краще чи на гірше, так працює більшість мов.
"hello" " world" == "hello world"
корисна, якщо вам потрібно написати довгий рядок і не хочете, щоб він виходив із вашого вікна, або ви хочете знаходитись у певній лінії звуження. Або якщо один з рядків визначений в макросі.
const string message = "Hello" ",world" + exclam
(напр., опускаючи перше+
), треба добре працювати.