我在我看过的一些代码示例中看到新行
\n
使用了两种不同的方式。第一个是'\n'
,第二个是"\n"
。有什么区别以及为什么要使用 '\n'
?
我理解
'\n'
代表字符,"\n"
代表字符串,但这有关系吗?
'\n'
是字符常量。
"\n"
是指向字符数组的指针,相当于 {'\n', '\0'}
(\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 个换行符组成的字符串。你不能写std::string(5, "\n");
。
您使用的任何函数或操作都会告诉您它是为 char 定义的、为 C 样式字符串定义的、通过重载为两者定义的、还是两者都定义的。
'\n'
是一个 char
常数。
"\n"
是const char[2]
。
所以用法是这样的:
char newLine = '\n';
const char* charPointerStringNewLine = "\n"; // implicit conversion
const char charStringNewLine[2] = "\n";
string stringNewLine( "\n" );
简而言之:一个是指向字符数组的指针,另一个是单个字符。
单引号表示字符,双引号表示字符串。根据上下文,您可以选择要使用的数据类型。
我明白' ' 代表一个字符并且“ " 代表一个字符串,但这有关系吗?
如果你理解这一点,那么就应该清楚它确实很重要。 C++ 标准库中的重载函数经常隐藏这一事实,因此也许 C 中的示例会更有用:
putchar
接受单个字符,因此只有 '\n'
是正确的,而 puts
和 printf
接受字符串,在这种情况下,只有 "\n"
是正确的。