11
votes

Quelle est la différence entre '\ n' ou "\ n" en c ++?

J'ai vu la nouvelle ligne \ n utilisé 2 façons différentes dans quelques exemples de code que j'ai consultés. Le premier étant '\ n' et le second étant "\ n" . Quelle est la différence et pourquoi utiliseriez-vous le '\ n' ?

Je comprends le '\ n' représente un caractère et "\ n" représente une chaîne mais cela est-il?


0 commentaires

5 Réponses :


25
votes

'\ n' est une constante de caractère.

"\ n" est un pointeur sur le tableau de caractères équivalent à {'\ n', '\ 0'} ( \ n plus le terminateur null)

Modifier

Je me rends compte que j'ai expliqué la différence, mais je n'ai pas répondu à la question.

lequel que vous utilisez dépend du contexte. Vous utilisez '\ n' si vous appelez une fonction qui attend un caractère, et "\ n" , s'il s'attend à une chaîne.


0 commentaires

1
votes

Les guillemets simples désignent un caractère et des devis doubles désignent une chaîne. Selon le contexte, vous pouvez choisir le type de données avec lequel travailler.


0 commentaires

2
votes

'\ n' est un char constante.

"\ n" est un const char [2] .

donc l'utilisation est quelque chose comme ceci: xxx

donc en bref: l'un est un pointeur sur un tableau de caractères, l'autre est un seul caractère.


1 commentaires

"\ n" est un Const caractère [2] , pas un const char * . Le premier est implicitement convertible à ce dernier, cependant.



8
votes

'\ n' est un charme littéral. "\ n" est un littéral à chaîne (une gamme de caractères, fondamentalement).

La différence n'a pas d'importance si vous l'écrivez dans un flux ordinaire. std :: COUT << "\ N"; a le même effet que std :: COUT << '\ N'; .

Dans presque tous les autres contextes, la différence compte. Un caractère n'est pas en général interchangeable avec une gamme de caractères ou avec une chaîne.

donc par exemple std :: string a un constructeur qui prend un const char * , mais il n'a pas de constructeur qui prend un char < / code>. Vous pouvez écrire std :: string ("\ n"); , mais std :: string ('\ n'); ne compile pas.

std :: string a également un constructeur qui prend un char et le nombre de fois pour le dupliquer. Il n'entre pas qui prend un const char * et le nombre de fois pour le dupliquer. Vous pouvez donc écrire std :: string (5, '\ n') et obtenir une chaîne composée de 5 caractères newline d'affilée. Vous ne pouvez pas écrire std :: string (5, "\ n"); .

Toute fonction ou une opération que vous utilisez vous indiquera s'il est défini pour un char, pour une chaîne de style C, pour la surcharge, ou pour ni ni.


1 commentaires

faute de frappe! J'ai oublié la barre oblique dans le second cas: std :: COUT << '\ N'; .



0
votes

Je comprends que le "\ n" représente un char et "/ n" représente une chaîne mais fait cela?

Si vous comprenez cela, alors il devrait être clair que cela comporte bien. Les fonctions surchargées dans la bibliothèque standard C ++ cachent souvent ce fait, alors peut-être qu'un exemple de C sera plus utile: puchar prend un seul caractère, alors seul '\ n' est Correct, alors que met et printf Prenez une chaîne, et dans ce cas, seul "\ n" est correct.


0 commentaires