“限定符”的含义是什么,“限定符”和“关键字”之间的区别是什么?
对于C中的volatile
限定符,我们可以说volatile
是关键字,那么“限定符”的含义是什么?
答案 0 :(得分:38)
限定符 会添加额外的“质量”,例如指定变量的波动率或常量。它们与形容词相似:“一个变幻无常的男人”,“一个 volatile int”,一个不朽的女士“,”一个 const double“。无论有没有限定符,变量本身仍然占用相同的内存量,并且每个位对状态/值具有相同的解释或贡献。限定符只是指明了如何访问它或存储它的位置。
关键字 是预定义的保留标识符(可以说,见下文),语言本身赋予了一些含义,而不是免费为您留下用于您自己的目的(即命名变量,类型,命名空间,函数......)。
volatile
和const
都是限定符和关键字if
,class
,namespace
是关键字,但不是限定符std
,main
,iostream
,x
,my_counter
都是标识符,但既不是关键字也不是限定符http://www.cppreference.com/wiki/keywords/start处有完整的关键字列表。 C ++目前没有任何不是关键字的限定符(即它们都是“单词”而不是一些标点符号)。
除了“限定词的含义”之外,快速使用限定词的语法 - 正如Zaibis在下面评论的那样:
... [限定符]仅限定[之后]之前没有任何内容的内容。所以如果你想要一个指向非
const
对象的const
指针,你必须写char * const var
......
标识符本身是词法标记(C ++源代码的不同部分):
如果有帮助,您可以考虑正则表达式“[A-Za-z _] [A-Za-z_0-9] *”指定的标识符。例如“egg”,“string”,“__ f”,“x0”但不“4e4”(一个double
字面数),“0x0a”(这是一个十六进制文字),“ (f)“(这是三个词汇标记,中间是标识符”f“)。
但关键字标识符是什么?
对于C ++,术语不一致使用。在一般的计算用法中,关键字是标识符的子集,而C ++ 11标准中的一些地方/用途清楚地反映了:
(有一些运算符的替代形式 - not
,and
,xor
,or
- 虽然烦人的Visual C ++默认禁用它们以避免破坏旧代码使用它们但不是运营商。)
正如Potatoswatter在评论中指出的那样,在许多其他地方,标准将词汇标记identifier
和keyword
定义为语法中的互斥标记:
还有一个边缘情况,其中确定的上下文敏感:
某些标识符(如“std”或“string”)具有C ++标准中指定的特定用法 - 但它们不是不是关键字。通常,编译器本身不会将它们与您自己的代码区别对待,如果您不包含任何标准指定的头文件,那么编译器可能甚至不知道标准强制使用“std”。您可以创建自己的函数,变量或称为“std”的类型。虽然不是一个好主意...虽然理解关键字和标准库之间的一般划分很好,但是实现可以自由地模糊边界,所以你应该假设C ++特性在包含相关标题并且你的用法与文档匹配时有用,并且不要做任何可能发生冲突的事情。