“qualifier”的含义是什么?“qualifier”和“keyword”之间的区别是什么?
对于C语言中的volatile
限定词,我们可以说volatile
是一个关键字,那么“qualifier”的含义是什么?
最佳答案
限定词添加了额外的“质量”,例如指定变量的易变性或常数。它们类似于形容词:“一个善变的人”,“一个易变的int”,“一个廉洁的女人”,“一个const double”。使用或不使用限定符,变量本身仍占据相同的内存量,并且每个位对状态/值的解释或贡献相同。限定符仅指定有关如何访问或存储它的内容。
关键字是预定义的保留标识符(可以说见下文),语言本身为其分配了一些含义,而不是免费留给您用于自己的目的(即命名变量,类型, namespace ,函数等)。
例子
volatile
和const
都是限定词和关键字if
,class
,namespace
是关键字,但不是限定词std
,main
,iostream
,x
,my_counter
都是标识符,但既不是关键字也不是限定词http://www.cppreference.com/wiki/keywords/start上有完整的关键字列表。 C++目前没有任何不是关键字的限定词(即它们都是“单词”,而不是一些标点符号)。
相对于其他类型信息,限定词在哪里出现?
除了“限定词的含义”之外,还有使用限定词的语法-正如Zaibis在下面的评论:
...[qualifiers] only qualify what follows [when] there is nothing preceding. so if you want a
const
pointer to non-const
object you had to writechar * const var
...
关于标识符的一点(很多?)
标识符本身是词汇标记(C++源代码的不同部分),它们是:
如果有帮助,您可以考虑正则表达式“[A-Za-z _] [A-Za-z_0-9] *”指定的标识符。例如“egg”,“string”,“__ f”,“x0”,但不包括“4e4”(一个
double
文字),“0x0a”(这是一个十六进制文字),“(f)”(这是三个词法标记,中间是标识符“f”)。但是关键字标识符吗?
对于C++,术语使用不一致。在一般的计算用法中,关键字是标识符的子集,并且C++ 11标准中的某些位置/用法清楚地反射(reflect)出:
(有些运算符有其他形式-
not
,and
,xor
,or
-尽管恼人的Visual C++默认禁用它们,以避免破坏使用它们但不用作运算符的旧代码。)正如Potatoswatter在评论中指出的那样,在许多其他地方,标准在语法中将词汇标记
identifier
和keyword
定义为互斥标记:还有一种极端情况,即确定的上下文相关:
您仍然不应该使用非关键字标识符
有些标识符(例如“std”或“string”)具有C++标准中指定的特定用法-尽管它们不是关键字。通常,编译器本身不会将它们与您自己的代码区别对待,并且,如果您不包括任何标准指定的 header ,则编译器甚至可能不知道标准规定的“std”用法。您也许可以创建自己的函数,变量或称为“std”的类型。虽然这不是一个好主意...虽然很高兴理解关键字和Standard库之间的一般划分,但是实现可以自由地模糊边界,因此您应该假设包含相关 header 并且用法与文档相匹配时,C++功能才能正常工作,并且不要做任何可能会冲突的事情。
关于c++ - “qualifier”是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785789/