“限定符”是什么意思?

时间:2010-09-24 09:33:01

标签: c++ c

“限定符”的含义是什么,“限定符”和“关键字”之间的区别是什么?

对于C中的volatile限定符,我们可以说volatile是关键字,那么“限定符”的含义是什么?

1 个答案:

答案 0 :(得分:38)

限定符 会添加额外的“质量”,例如指定变量的波动率或常量。它们与形容词相似:“一个变幻无常的男人”,“一个 volatile int”,一个不朽的女士“,”一个 const double“。无论有没有限定符,变量本身仍然占用相同的内存量,并且每个位对状态/值具有相同的解释或贡献。限定符只是指明了如何访问它或存储它的位置。

关键字 是预定义的保留标识符(可以说,见下文),语言本身赋予了一些含义,而不是免费为您留下用于您自己的目的(即命名变量,类型,命名空间,函数......)。

实施例

  • volatileconst都是限定符和关键字
  • ifclassnamespace是关键字,但不是限定符
  • stdmainiostreamxmy_counter都是标识符,但既不是关键字也不是限定符

http://www.cppreference.com/wiki/keywords/start处有完整的关键字列表。 C ++目前没有任何不是关键字的限定符(即它们都是“单词”而不是一些标点符号)。


限定符相对于其他类型信息出现在哪里?

除了“限定词的含义”之外,快速使用限定词的语法 - 正如Zaibis在下面评论的那样:

  

... [限定符]仅限定[之后]之前没有任何内容的内容。所以如果你想要一个指向非const对象的const指针,你必须写char * const var ......


关于标识符

的一点(很多?)

标识符本身是词法标记(C ++源代码的不同部分):

  • 以字母/字母或下划线开头
  • 继续使用0个或更多的字母数字或下划线

如果有帮助,您可以考虑正则表达式“[A-Za-z _] [A-Za-z_0-9] *”指定的标识符。例如“egg”,“string”,“__ f”,“x0”但“4e4”(一个double字面数),“0x0a”(这是一个十六进制文字),“ (f)“(这是三个词汇标记,中间是标识符”f“)。

但关键字标识符是什么?

对于C ++,术语不一致使用。在一般的计算用法中,关键字是标识符的子集,而C ++ 11标准中的一些地方/用途清楚地反映了:

  • “表4中显示的标识符保留用作关键字”(2.12关键字中的第一句)
  • “C ++中关键字或运算符的标识符......”(摘自17.6.1.2脚注7)

(有一些运算符的替代形式 - notandxoror - 虽然烦人的Visual C ++默认禁用它们以避免破坏旧代码使用它们但不是运营商。)

正如Potatoswatter在评论中指出的那样,在许多其他地方,标准将词汇标记identifierkeyword定义为语法中的互斥标记:

  • “有五种令牌:标识符,关键字......”(2.7令牌)

还有一个边缘情况,其中确定的上下文敏感:

  • 如果满足标识符(2.11)的语法要求的关键字(2.12)或备用标记(2.6)包含在属性标记中,则将其视为标识符。 (7.6.1。属性语法和语义2)

您仍然不应使用的非关键字标识符

某些标识符(如“std”或“string”)具有C ++标准中指定的特定用法 - 但它们不是不是关键字。通常,编译器本身不会将它们与您自己的代码区别对待,如果您不包含任何标准指定的头文件,那么编译器可能甚至不知道标准强制使用“std”。您可以创建自己的函数,变量或称为“std”的类型。虽然不是一个好主意...虽然理解关键字和标准库之间的一般划分很好,但是实现可以自由地模糊边界,所以你应该假设C ++特性在包含相关标题并且你的用法与文档匹配时有用,并且不要做任何可能发生冲突的事情。