c++ - “qualifier”是什么意思?

标签 c++ c

“qualifier”的含义是什么?“qualifier”和“keyword”之间的区别是什么?

对于C语言中的volatile限定词,我们可以说volatile是一个关键字,那么“qualifier”的含义是什么?

最佳答案

限定词添加了额外的“质量”,例如指定变量的易变性或常数。它们类似于形容词:“一个善变的人”,“一个易变的int”,“一个廉洁的女人”,“一个const double”。使用或不使用限定符,变量本身仍占据相同的内存量,并且每个位对状态/值的解释或贡献相同。限定符仅指定有关如何访问或存储它的内容。

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

例子

  • volatileconst都是限定词和关键字
  • ifclassnamespace是关键字,但不是限定词
  • stdmainiostreamxmy_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 write 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标准中的某些位置/用法清楚地反射(reflect)出:
  • “表4中显示的标识符保留用作关键字”(2.12关键字的第一句话)
  • “在C++中是关键字或运算符的标识符...”(从17.6.1.2脚注7起)

  • (有些运算符有其他形式-notandxoror-尽管恼人的Visual C++默认禁用它们,以避免破坏使用它们但不用作运算符的旧代码。)

    正如Potatoswatter在评论中指出的那样,在许多其他地方,标准在语法中将词汇标记identifierkeyword定义为互斥标记:
  • “ token 共有五种:标识符,关键字,...”(2.7 token )

  • 还有一种极端情况,即确定的上下文相关:
  • 如果属性 token 中包含满足标识符(2.11)语法要求的关键字(2.12)或替代 token (2.6),则将其视为标识符。 (7.6.1。属性语法和语义2)


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

    有些标识符(例如“std”或“string”)具有C++标准中指定的特定用法-尽管它们不是关键字。通常,编译器本身不会将它们与您自己的代码区别对待,并且,如果您不包括任何标准指定的 header ,则编译器甚至可能不知道标准规定的“std”用法。您也许可以创建自己的函数,变量或称为“std”的类型。虽然这不是一个好主意...虽然很高兴理解关键字和Standard库之间的一般划分,但是实现可以自由地模糊边界,因此您应该假设包含相关 header 并且用法与文档相匹配时,C++功能才能正常工作,并且不要做任何可能会冲突的事情。

    关于c++ - “qualifier”是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785789/

    相关文章:

    c++ - 复制类中定义的 std::map 时出错

    c++ - Global const string& 对我来说很难闻,它真的安全吗?

    c++ - 查找项目是否已存在于 STL 队列中

    c - 您如何获得指向 .text 部分的指针?

    c - 无法写入 C 中的共享内存缓冲区

    python - "No module named"。 gdb 中的 Python 错误

    c++ - 已编译二进制文件的大小如何取决于所使用的库? C/C++

    c++ - lambda 函数中的变量显示垃圾值

    c - 我想在 IAR 工作台编译器中将数据从 long 转换为 ASCII

    C-将txt中的单词写入数组