Не кладите ничего между строк. Часть этапа лексирования в C ++ заключается в объединении смежных строковых литералов (даже через символы новой строки и комментарии) в один литерал.
#include <iostream>
#include <string>
main() {
std::string my_val ="Hello world, this is an overly long string to have"
" on just one line";
std::cout << "My Val is : " << my_val << std::endl;
}
Обратите внимание, что если вы хотите новую строку в литерале, вам придется добавить это самостоятельно:
#include <iostream>
#include <string>
main() {
std::string my_val ="This string gets displayed over\n"
"two lines when sent to cout.";
std::cout << "My Val is : " << my_val << std::endl;
}
Если вы хотите смешать целочисленную константу #define
d с литералом, вам придется использовать несколько макросов:
#include <iostream>
using namespace std;
#define TWO 2
#define XSTRINGIFY(s) #s
#define STRINGIFY(s) XSTRINGIFY(s)
int main(int argc, char* argv[])
{
std::cout << "abc" // Outputs "abc2DEF"
STRINGIFY(TWO)
"DEF" << endl;
std::cout << "abc" // Outputs "abcTWODEF"
XSTRINGIFY(TWO)
"DEF" << endl;
}
Существует некоторая странность в связи с тем, как работает оператор процессора stringify, поэтому вам нужно два уровня макроса, чтобы получить действительное значение TWO
, которое будет преобразовано в строковый литерал.