'\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, как для перегрузки, так и для обеих.