如果您想要一个字符字面量,那么您需要它:
char apos = '\'';
如果您需要使用'
字符,那么您需要它:
char c = '\'';
我认为这只是为了在字符常量和字符串字面值之间保持一致。
语言本来可以要求包含单引号的字符串字面值写成"'"
而不是"\'"
,包含双引号的字符常量写成'"'
而不是'\"'
。(当然,"'"
和'"'
都是完全有效的。)
允许但不要求在字符串字面值中转义'
,在字符常量中转义"
,使语言变得更加灵活,让字符串字面值和字符常量使用相同的转义集,并且不会造成任何特殊的影响。
至于为什么你应该使用一种形式还是另一种形式,那就取决于你自己。使用你更熟悉的形式。
比如说,如果你想从服务器端生成一个锚点的 HTML,显然你会使用类似下面这样的 string.format...
X = string.Format("<a href=\"tel:{0}\" onclick=\"Javascript: goog_report_conversion({1}); return false;\">{0}</a>", displayText, sRegPhone);
我们在函数调用和锚点的href中需要使用双引号,但是如果在语句中像下面这样使用会出错...
"<a href="tel:{0}""></a>
<a onclick="Javascript: goog_report_conversion(2818669180); return false;" href="tel:(281) 866-9180">(281) 866-9180</a>
因此,它主要用于转义即将出现的文字......
\
是用于转义“特殊字符”的字符。这是什么意思?
这意味着当解析器遇到某些字符时,它会执行一些神奇的操作。这些神奇的操作是在解析过程中状态的改变。状态的改变就像:现在你进入了一个字符串字面量,现在你换行了,现在你离开了一个字符常量等。
选择使用'\'字符来抑制它前面字符的神奇含义。因此,在行末的\
将抑制其含义,允许在编辑器中构建跨多行的宏,但由预处理器视为1个词元(预处理器使用换行符作为分隔符)。
如果您在"
之前加上\
,它将抑制其作为字符串字面量的开始或结束的含义,与'
相同。
同时还确定了,如果在一个非魔法字符之前添加\
将被忽略(当没有魔法时,你不能抑制魔法)。因此,写 "\'" 不是问题。在字符串文字中, '
没有任何魔法意义,转义只是简单地被忽略。您可以在字符串文字中使用 \
作为任何字符的前缀,没有问题(当然除了数字和八进制、十进制和十六进制字符的x
)。
"""
。你会得到答案的。 - Krishnabhadra