С++ многострочный строковый исходный литерал

Мы можем определить строку с многострочной:

const char* text1 = "part 1"
                    "part 2"
                    "part 3"
                    "part 4";

const char* text2 = "part 1\
                     part 2\
                     part 3\
                     part 4";

Как насчет с исходным литералом, я пробовал все, никто не работает

std::string text1 = R"part 1"+
                    R"part 2"+ 
                    R"part 3"+
                    R"part 4";

std::string text2 = R"part 1"
                    R"part 2" 
                    R"part 3"
                    R"part 4";

std::string text3 = R"part 1\
                      part 2\ 
                      part 3\
                      part 4";

std::string text4 = R"part 1
                      part 2 
                      part 3
                      part 4";

Ответ 1

Обратите внимание, что строковые литералы строки разделены символами R"( и )" (или вы можете добавить к разделителю, добавив символы между цитатой и parens, если вам нужна дополнительная "уникальность" ).

#include <iostream>
#include <ostream>
#include <string>

int main () 
{
    // raw-string literal example with the literal made up of separate, concatenated literals
    std::string s = R"(abc)" 
                    R"( followed by not a newline: \n)"
                    " which is then followed by a non-raw literal that concatenated \n with"
                    " an embedded non-raw newline";

    std::cout << s << std::endl;

    return 0;
}

Ответ 2

Просто напишите его, как хотите:

std::string text = R"(part 1
part 2
part 3
part 4)";

Другая вещь, которую вы не ввели, - это требуемая пара круглых скобок вокруг всей строки.

Также имейте в виду, что все ведущие пробелы на части 2-4 строк, которые вы можете добавить, чтобы сохранить форматированный код, включены, а также ведущую новую строку, чтобы получить часть 1 с другими, так что это делает ее скорее уродливо видеть в коде иногда.

Опция, которая может быть правдоподобной для сохранения вещей в порядке, но все еще используя исходные строковые литералы, заключается в конкатенации строк:

R"(part 1)" "\n" 
R"(part 2)" "\n" 
R"(part 3)" "\n" 
R"(part 4)"