我看到新行\n
在我看过的一些代码示例中使用了两种不同的方式。第一个是'\n'
,第二个是"\n"
。有什么区别,为什么要使用'\n'
?
我理解'\n'
代表一个字符,"\n"
表示字符串,但这有关系吗?
答案 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'
是正确的,而puts
和printf
取一个字符串,在这种情况下,只有"\n"
是正确的。