В чем разница между "n" или "n " в C++?

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

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

5 ответов


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

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

редактировать

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

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


'\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 символов новой строки в строку. Ты не можешь писать!--13-->.

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


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

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

так Использование что-то вроде этого:

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

string stringNewLine( "\n" );

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


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


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

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