C ++中'\ n'或“\ n”有什么区别?

时间:2010-10-26 18:42:00

标签: c++ newline

我看到新行\n在我看过的一些代码示例中使用了两种不同的方式。第一个是'\n',第二个是"\n"。有什么区别,为什么要使用'\n'

我理解'\n'代表一个字符,"\n"表示字符串,但这有关系吗?

5 个答案:

答案 0 :(得分:26)

'\n'是一个字符常量。

"\n"是指向等于{'\n', '\0'}\n加上空终止符)的字符数组的指针

修改

我意识到我解释了差异,但没有回答这个问题。

您使用哪一个取决于上下文。如果要调用期望字符的函数,则使用'\n';如果需要字符串,则使用"\n"

答案 1 :(得分:8)

'\n'是一个字面文字。 "\n"是一个字符串文字(基本上是字符数组)。

如果您将其写入普通流,则差异无关紧要。 std::cout << "\n";std::cout << '\n';具有相同的效果。

在几乎所有其他情况下,差异都很重要。 char通常不能与字符数组或字符串互换。

因此,例如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");

您使用的任何函数或操作都会告诉您它是为char定义的,C样式的字符串,是通过重载还是两者都没有。

答案 2 :(得分:2)

'\n'char常量。

"\n"const char[2]

所以用法是这样的:

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

string stringNewLine( "\n" );

简而言之:一个是指向字符数组的指针,另一个是单个字符。

答案 3 :(得分:1)

单引号表示字符,双引号表示字符串。根据上下文,您可以选择要使用的数据类型。

答案 4 :(得分:0)

  

我理解'\ n'代表一个字符,“/ n”代表一个字符串,但这有关系吗?

如果您理解这一点,那么应该清楚它确实很重要。 C ++标准库中的重载函数经常隐藏这一事实,因此C中的示例可能更有用:putchar只需要一个字符,因此只有'\n'是正确的,而putsprintf取一个字符串,在这种情况下,只有"\n"是正确的。