306просмотров
15 сентября 2025 г.
questionScore: 337
Как можно оформить в C++ длинный строковый литерал и разбить его на нескольксо строк в коде? Допустим, мы хотим разбить длинную строку в коде на несколько линий, но так чтобы переносы строк и отступы из самого кода не повлияли на результат. Один из проcтейших способов - просто написать строки в кавычках друг за другом:
std::string str1 = "Если ты, следуя правому разуму, будешь старательно," " ревностно и любовно относиться к делу, которым ты в" " данный момент занят...";
std::cout << str1 << std::endl; // напечатает всё в одну строку Такой вариант склеит строки без переносов \n, но тут важно самостоятельно не пропустить пробелы в местах разрывов. Однако, есть и другой способ: можно использовать кавычки только в начале и конце всей строки, вставив символ \
как самый последний (!) на каждой строке:
std::string str1 = "Если ты, следуя правому разуму, будешь старательно, \
ревностно и любовно относиться к делу, которым ты в \
данный момент занят...";
std::cout << str1 << std::endl; // напечатает всё в одну строку При этом начинать новую строку следует с самого начала, иначе любой отступ в коде
попадет и в саму строку. Неудобно, правда? А как же raw string literals? Те самые, что заключаются в R"( и )" (или другие разделители)...
Да, они замечательно подходят, чтоб не экранировать разные символы, вроде кавычек и обратных слешей:
std::string json = R"(
{ "path": "C:\Program Files\",
}
)"; Но что будет, если взять нашу цитату, перенесенную по строкам в коде: std::string str1 = R"(Если ты, следуя правому разуму, будешь старательно, ревностно и любовно относиться к делу, которым ты в данный момент занят...)"; Оно вставит переносы строк \n и отступы из кода в результат. Мой победитель: просто строки в двойных кавычках на каждой строке. Просто, привычно, не вставляет ненужных символов и позволяет форматировать код.