Странное поведение & lt; & lt; (как мне кажется)

Я не могу понять, как можно было напечатать строку таким образом без каких-либо жалоб со стороны компилятора:

std::cout << "Hello " "World!";

На самом деле, вышеприведенная строка работает в точности так:

std::cout << "Hello " << "World!";

Есть ли объяснение этому поведению?

5

Решение

Смежные буквальные токены объединяются автоматически, это часть стандарта.

2.1 Фазы перевода [lex.phases]

6) Смежный обычная строка Буквальные токены объединяются. Смежные широкие строковые литеральные токены объединяются.

(C ++ 03)

11

Другие решения

В C ++ литеральные токены могут быть объединены следующим образом:

const char* thingy = "Hello" "World";

"Hello" а также "World«каждый буквальный знак.

1

Это нормальное поведение строк. В первой строке указанные строки объединяются компилятором автоматически. В качестве образца вы можете указать также многострочное, чтобы избежать очень длинной строки.

const char *strLine = "line 1 ""line 1 ""line 2 ";

И это будет работать хорошо. Вторая строка очищается, указывается еще одна строка для вывода.

1
По вопросам рекламы [email protected]