2017-02-10 3 views
-2

Я делаю некоторые упражнения в C++, когда я наткнулся на что-то не так ясно для меня:Конкатенация строки и Int в C++

cout << "String" + 1 << endl; 

выходы: Тринга

Я предлагаю это что-то с указателем арифметика, но означает ли это, что каждый раз, когда я печатаю что-то в кавычках, которые не являются частью предыдущего определенного массива, я на самом деле создаю массив символов?

+0

The type '' String "' is 'const char *', так что да, это арифметика указателя, но вы не создаете массив, этот выпекается в секцию данных exectuble (AFAIK). – Borgleader

+0

Вы хотите получить ответ о том, почему это произошло или как получить то, что вы хотите? – NathanOliver

+0

'' String "' - строковый литерал статического времени жизни, и вы правильно выполняете арифметику указателя. Осторожно не добавлять больше длины строки, так как программа начнет считывать мусор и вызывать ub. – George

ответ

7

Цитированная строка (формально строковый литерал) представляет собой массив const char, независимо от того, печатаете ли вы его или делаете что-либо еще с ним.

5

Код:

cout << "String" + 1 << endl; 

имеет тот же эффект, как это:

const char *ptr = "String"; 
cout << ptr + 1 << endl; 

так нет не создавать новый массив, вы просто изменить указатель и передать его в std::cout

+0

Компилятор оптимизирует ptr + 1 на один номер. – Yashas

+0

@YashasSamaga и? – Slava

+0

Ничего другого, но я задаюсь вопросом, выбрал ли компилятор первый символ для выполнения cout << "String" +1; – Yashas

Смежные вопросы