" \'"的目的是什么?逃脱序列?

时间:2012-12-17 08:50:32

标签: c++ c

  

可能重复:
  What is the rationale in allowing `?` to be escaped?

如果我能这样做:

string i = "'";

为什么这样做:

string i = "\'";

7 个答案:

答案 0 :(得分:11)

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

char apos = '\'';

答案 1 :(得分:6)

如果您需要'字符:

,则需要它
char c = '\'';

答案 2 :(得分:3)

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

语言可能要求包含单个撇号的字符串文字写为"'"而不是"\'",字符常量包含要写的双引号作为'"',而不是'\"'。 (当然"'"'"'都非常有效。)

允许但不要求'在字符串文字中转义,并且"在字符常量中转义,使语言更灵活一些,让字符串文字和字符常量使用同一组逃脱,并没有特别的伤害。

至于为什么你使用一种形式或另一种形式,这取决于你。使用您更熟悉的形式。

答案 3 :(得分:1)

就像克雷克说的那样,如果你想要文字而不是被评估的字符,你就会逃避角色。例如,“\”“或正则表达式中的文字括号。它使解释器不会将转义字符作为除实际字符值之外的任何内容进行评估。

答案 4 :(得分:1)

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

因此大部分时间用于逃避即将到来的文字......

答案 5 :(得分:0)

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

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

的方法

几乎所有语言都占上风

答案 6 :(得分:0)

\是用于转义“特殊字符”的字符。那是什么意思?

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

选择'\'字符来抑制它前面的字符的魔法含义。因此,一行末尾的\将抑制其含义,允许在编辑器中的几行上构造宏,但预处理器将其视为1个lexem(预处理器使用新的-line as delimiter)。

如果您在"之前加\,则会抑制其字符串文字的开头或结尾的含义,与'相同。

还召集了非魔法字符之前的\只会被忽略(当没有魔法时你无法抑制魔法)。因此,写“\”是不是问题。 '在字符串文字中没有神奇的含义,并且简单地忽略了转义。您可以在字符串文字中使用\之前的任何字符都没有问题(除了当然数字和x八进制,十进制和十六进制字符)。