10

可能重复:
允许 `?` 转义的理由是什么?

如果我能做到这一点:

string i = "'";

为什么这样做:

string i = "\'";
4

7 回答 7

11

如果你想要一个字符文字,你需要它:

char apos = '\'';
于 2012-12-17T08:51:14.580 回答
6

如果你需要一个'字符,你需要它:

char c = '\'';
于 2012-12-17T08:52:11.867 回答
3

我认为这只是为了字符常量和字符串文字之间的一致性。

该语言可能需要将包含单个撇号的字符串文字写成"'"而不是写成"\'",将包含双引号的字符常量写成写成'"'而不是写成'\"'。(当然"'"'"'两者都是完全有效的。)

允许但不要求'在字符串文字和"字符常量中进行转义,使语言更加灵活一点,让字符串文字和字符常量使用相同的转义集,并且没有特别的危害。

至于为什么你应该使用一种或另一种形式,这取决于你。使用您更喜欢的任何形式。

于 2012-12-17T09:25:11.133 回答
1

假设如果您想从服务器端为锚点生成 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>

所以它主要用于转义即将到来的文字......

于 2012-12-17T11:34:09.970 回答
1

就像 Kerrek 所说,如果你想要文字字符而不是评估的字符,你可以转义字符。例如,"\"" 或正则表达式中的文字括号。它使解释器不会将转义字符评估为除实际字符值之外的任何内容。

于 2012-12-17T08:55:32.690 回答
0

用简单的英语,我可以说该语言的作者必须使用一些特殊字符来编译代码

所以为了让程序员使用这个字符,他们使用了使用“/”的方法

它在几乎所有语言中盛行

于 2012-12-17T10:29:51.080 回答
0

\是用于转义“特殊字符”的字符。这意味着什么?

这意味着解析器在遇到某些字符时会做一些神奇的事情。这些神奇的东西是解析过程中的状态变化。状态的改变类似于:现在你输入一个字符串文字,现在你转到下一行,现在你留下一个字符常量等等。

选择“\”字符是为了抑制其前面字符的神奇含义。因此\,行尾的 a 将抑制其含义,例如,允许在编辑器中的多行上构造宏,但被预处理器视为 1 lexem(预处理器使用换行符作为分隔符) .

如果您在 a 前面"加上 a \,它将抑制其字符串文字开始或结束的含义,与 . 相同'

还召集了只忽略\前面的非魔法字符(没有魔法时你不能压制魔法)。所以写“\'”不是问题。在'字符串文字中没有神奇的含义,转义被简单地忽略了。您可以在字符串文字中的任何字符前面\没有问题(当然数字以及x八进制、十进制和十六进制字符除外)。

于 2012-12-17T11:32:31.773 回答