' 和有什么区别 ' 或者 ” “在 C++ 中?

问题描述 投票:0回答:5

我在我看过的一些代码示例中看到新行

\n
使用了两种不同的方式。第一个是
'\n'
,第二个是
"\n"
。有什么区别以及为什么要使用
'\n'

我理解

'\n'
代表字符,
"\n"
代表字符串,但这有关系吗?

c++ newline
5个回答
25
投票

'\n'
是字符常量。

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

编辑

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

您使用哪一种取决于上下文。如果您调用需要字符的函数,则使用

'\n'
;如果需要字符串,则使用
"\n"


9
投票

'\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 样式字符串定义的、通过重载为两者定义的、还是两者都定义的。


2
投票

'\n'
是一个
char
常数。

"\n"
const char[2]

所以用法是这样的:

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

string stringNewLine( "\n" );

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


1
投票

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


0
投票

我明白' ' 代表一个字符并且“ " 代表一个字符串,但这有关系吗?

如果你理解这一点,那么就应该清楚它确实很重要。 C++ 标准库中的重载函数经常隐藏这一事实,因此也许 C 中的示例会更有用:

putchar
接受单个字符,因此只有
'\n'
是正确的,而
puts
printf
接受字符串,在这种情况下,只有
"\n"
是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.