Я не могу понять, как можно было напечатать строку таким образом без каких-либо жалоб со стороны компилятора:
std::cout << "Hello " "World!";
На самом деле, вышеприведенная строка работает в точности так:
std::cout << "Hello " << "World!";
Есть ли объяснение этому поведению?
Смежные буквальные токены объединяются автоматически, это часть стандарта.
6) Смежный
обычная строкаБуквальные токены объединяются.Смежные широкие строковые литеральные токены объединяются.
(C ++ 03)
В C ++ литеральные токены могут быть объединены следующим образом:
const char* thingy = "Hello" "World";
"Hello"
а также "World
«каждый буквальный знак.
Это нормальное поведение строк. В первой строке указанные строки объединяются компилятором автоматически. В качестве образца вы можете указать также многострочное, чтобы избежать очень длинной строки.
const char *strLine = "line 1 ""line 1 ""line 2 ";
И это будет работать хорошо. Вторая строка очищается, указывается еще одна строка для вывода.