В чем разница между \ n или \ n в C ++? - PullRequest
10 голосов
/ 26 октября 2010

Я видел, как новая строка \n использовала 2 разных способа в нескольких примерах кода, на которые я смотрел.Первый из них '\n', а второй "\n".В чем разница и почему вы используете '\n'?

Я понимаю, что '\n' представляет символ, а "\n" представляет строку, но имеет ли это значение?

Ответы [ 5 ]

26 голосов
/ 26 октября 2010

'\n' - символьная константа.

"\n" - указатель на массив символов, эквивалентный {'\n', '\0'} (\n плюс нулевой терминатор)

РЕДАКТИРОВАТЬ

Я понимаю, что объяснил разницу, но не ответил на вопрос.

Какой из них вы используете, зависит от контекста.Вы используете '\n', если вы вызываете функцию, которая ожидает символ, и "\n", если она ожидает строку.

8 голосов
/ 26 октября 2010

'\n' - символ-символ. "\n" - строковый литерал (в основном, массив символов).

Разница не имеет значения, записываете ли вы ее в обычный поток. std::cout << "\n"; имеет тот же эффект, что и std::cout << '\n';.

Почти во всех других контекстах разница имеет значение. Символ обычно не взаимозаменяем с массивом символов или строкой.

Так, например, std::string имеет конструктор, который принимает const char*, но он не имеет конструктора, который принимает char. Вы можете написать std::string("\n");, но std::string('\n'); не компилируется.

std::string также имеет конструктор, который принимает char и количество раз, чтобы его дублировать. У него нет такого, который занимает const char* и сколько раз его дублируют. Таким образом, вы можете написать std::string(5,'\n') и получить строку, состоящую из 5 символов новой строки подряд. Вы не можете написать std::string(5, "\n");.

Любая функция или операция, которую вы используете, сообщит вам, определена ли она для символа, для строки в стиле C, как для перегрузки, так и для обеих.

2 голосов
/ 26 октября 2010

'\n' - это char константа.

"\n" - это const char[2].

Так что использование выглядит примерно так:

char newLine = '\n';
const char* charPointerStringNewLine = "\n"; // implicit conversion
const char charStringNewLine[2] = "\n";

string stringNewLine( "\n" );

Короче говоря: один - указатель на массив символов, другой - один символ.

1 голос
/ 26 октября 2010

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

0 голосов
/ 26 октября 2010

Я понимаю, что '\ n' представляет символ, а "/ n" представляет строку, но имеет ли это значение?

Если вы понимаете это, тогда должно быть ясно, что онодействительно имеет значение.Перегруженные функции в стандартной библиотеке C ++ часто скрывают этот факт, поэтому, возможно, пример из C будет более полезным: putchar принимает один символ, поэтому только '\n' является правильным, тогда как puts и printf принимают строкуи в этом случае только "\n" является правильным.

...