"限定符"是什么意思?

ank*_*kit 16 c c++

"限定符"是什么意思,"限定符"和"关键字"之间的区别是什么?

对于volatileC中的限定符,我们可以说这volatile是一个关键字,那么"限定符"的含义是什么?

Ton*_*roy 41

限定符增加了一个额外的"质量",例如指定一个变量的波动或常量性.它们与形容词类似:" 善变的人"," 挥发性的 "," 不朽的女士"," 常量双人".无论有没有限定符,变量本身仍然占用相同的内存量,并且每个位对状态/值具有相同的解释或贡献.限定符只是指定了如何访问它或存储位置.

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

例子

  • volatile并且const都是限定词和关键词
  • if,class,namespace是关键字,但不预选赛
  • std,main,iostream,x,my_counter是所有标识符但既不是关键字也不预选赛

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


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

除了"限定词意味着什么"之外,快速使用限定符的语法 - 如下Zaibis评论:

...... [限定符]仅限定[之后]之前没有任何内容的内容.所以,如果你想要一个constconst对象的指针你必须写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)

(有一些运营商的替代形式- ,not,,and -虽然烦人的Visual C++默认禁用它们,以避免破坏所使用他们,但不作为运营商的旧代码)xoror

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

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

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

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

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

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