C++中 '\n' 和 "\n"的区别是什么?

11

我看过一些代码示例,发现新行\n被用于两种不同的方式。第一种是'\n',第二种是"\n"。有什么区别?为什么要使用'\n'

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

5个回答

25

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

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

编辑

我意识到我解释了它们之间的区别,但没有回答问题。

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


8

'\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风格的字符串,通过重载两者都支持或都不支持。


打字错误!在第二个例子中忘记了斜杠:std::cout << '\n'; - leoger

2

'\n'是一个char常量。

"\n"是一个const char[2]

因此,使用方式如下:

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

string stringNewLine( "\n" );

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

2
"\n" 是一个 const char[2],而不是一个 const char*。不过前者可以隐式转换为后者。 - GManNickG

1

单引号表示一个字符,双引号表示一个字符串。根据上下文,您可以选择使用哪种数据类型进行操作。


0
我理解 '\n' 代表一个字符,而 "/n" 代表一个字符串,但这是否重要呢?
如果你理解了这一点,那么它确实很重要。在 C++ 标准库中的重载函数经常隐藏这个事实,因此也许来自 C 的示例会更有用:putchar 接受单个字符,因此只有 '\n' 是正确的,而 puts 和 printf 接受字符串,在这种情况下,只有 "\n" 是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接