可能重复:
允许 `?` 转义的理由是什么?
如果我能做到这一点:
string i = "'";
为什么这样做:
string i = "\'";
如果你想要一个字符文字,你需要它:
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);
我们需要在 anchor 中为函数调用和 href 加上双引号,但在服务器的语句中使用如下所示会出错。
"<a href="tel:{0}""></a>
因此,为了克服这个问题,我们使用转义序列,它反过来在服务器端转义(不会考虑)下一个文字到 \ ,但会在输出区域或客户端与跳过的文字一起生成......如下所示
<a onclick="Javascript: goog_report_conversion(2818669180); return false;" href="tel:(281) 866-9180">(281) 866-9180</a>
所以它主要用于转义即将到来的文字......
就像 Kerrek 所说,如果你想要文字字符而不是评估的字符,你可以转义字符。例如,"\"" 或正则表达式中的文字括号。它使解释器不会将转义字符评估为除实际字符值之外的任何内容。
用简单的英语,我可以说该语言的作者必须使用一些特殊字符来编译代码
所以为了让程序员使用这个字符,他们使用了使用“/”的方法
它在几乎所有语言中盛行
\
是用于转义“特殊字符”的字符。这意味着什么?
这意味着解析器在遇到某些字符时会做一些神奇的事情。这些神奇的东西是解析过程中的状态变化。状态的改变类似于:现在你输入一个字符串文字,现在你转到下一行,现在你留下一个字符常量等等。
选择“\”字符是为了抑制其前面字符的神奇含义。因此\
,行尾的 a 将抑制其含义,例如,允许在编辑器中的多行上构造宏,但被预处理器视为 1 lexem(预处理器使用换行符作为分隔符) .
如果您在 a 前面"
加上 a \
,它将抑制其字符串文字开始或结束的含义,与 . 相同'
。
还召集了只忽略\
前面的非魔法字符(没有魔法时你不能压制魔法)。所以写“\'”不是问题。在'
字符串文字中没有神奇的含义,转义被简单地忽略了。您可以在字符串文字中的任何字符前面\
没有问题(当然数字以及x
八进制、十进制和十六进制字符除外)。