Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “是什么意思?”;限定词;?_C++_C - Fatal编程技术网

C++ “是什么意思?”;限定词;?

C++ “是什么意思?”;限定词;?,c++,c,C++,C,“限定词”的含义是什么,“限定词”和“关键字”之间的区别是什么 对于C中的volatile限定符,我们可以说volatile是一个关键字,那么“限定符”是什么意思呢?a限定符增加了一个额外的“质量”,例如指定变量的波动性或常量。它们类似于形容词:“变化无常的男人”、“反复无常的整数”、“清廉的女士”、“守旧的替身”。无论是否使用限定符,变量本身仍然占用相同的内存量,并且每个位对状态/值具有相同的解释或贡献。限定符只是指定如何访问它或将它存储在何处 关键字是预定义的保留标识符(可以说,请参见下文)

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

对于C中的
volatile
限定符,我们可以说
volatile
是一个关键字,那么“限定符”是什么意思呢?

a限定符增加了一个额外的“质量”,例如指定变量的波动性或常量。它们类似于形容词:“变化无常的男人”、“反复无常的整数”、“清廉的女士”、“守旧的替身”。无论是否使用限定符,变量本身仍然占用相同的内存量,并且每个位对状态/值具有相同的解释或贡献。限定符只是指定如何访问它或将它存储在何处

关键字是预定义的保留标识符(可以说,请参见下文),语言本身赋予这些标识符一些含义,而不是让您自由地用于自己的目的(即命名变量、类型、名称空间、函数…)

例子
  • volatile
    const
    都是限定词和关键字
  • 如果
    命名空间
    是关键字,但不是限定符
  • std
    main
    iostream
    x
    myu计数器
    都是标识符,但既不是关键字也不是限定符
网站上有一个完整的关键字列表。C++目前没有任何关键字不是限定词(即它们都是“单词”而不是标点符号)。
相对于其他类型信息,限定符出现在哪里? 除了“限定词是什么意思”之外,我们还可以快速了解使用限定词的语法,如以下Zaibis评论所示:

…[限定符]仅当[前面]没有任何内容时才限定后面的内容。因此,如果您想要一个指向非
const
对象的
const
指针,您必须编写
char*const var


关于标识符的一点(很多?)

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

  • 以字母/字母字符或下划线开头
  • 使用0个或更多字母数字或下划线继续
如果有帮助,您可以考虑由regexp“[A-Za-z_][A-Za-z_0-9]*”指定的标识符。例如“egg”、“string”、“_uf”、“x0”而不是“4e4”(a
double
literal)、“0x0a”(这是十六进制文字)、“(f)”(这是三个词汇标记,中间是标识符“f”)

但是关键字是标识符吗?

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

  • “表4中所示的标识符保留用作关键字”(2.12关键字中的第一句)
  • “C++中的关键字或运算符标识符…”(从7.61.2注脚7)

(有一些操作符的可选形式-<代码>不< /COD>,<代码>和< /COD>,<代码> XOR ,<代码>或 -尽管恼人的Visual C++默认禁用它们,以避免使用旧代码而不是操作符。 正如Potatoswatter在评论中指出的那样,在许多其他地方,该标准将词汇标记

标识符
关键字
定义为语法中相互排斥的标记:

  • “有五种令牌:标识符、关键字等”(2.7令牌)
还有一种边缘情况,其中确定的上下文敏感:

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

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

某些标识符,如“STD”或“String”,在C++标准中有特定的用法,但它们不是关键字。一般来说,编译器本身不会将它们与您自己的代码区别对待,如果您没有包含任何标准指定的头,那么编译器可能甚至不知道标准强制使用的“std”。您可以创建自己的函数、变量或类型“std”。虽然不是个好主意。。。虽然理解关键字和标准库之间的一般划分是很好的,但是实现有自由的界限,所以你应该假设C++的特征在包含相关的头文件和你的用法匹配文档时工作,并且不做任何可能发生冲突的事情。限定词包含语义信息。Dario:很好的洞察力,但是任何需要提问的人如果没有更多的解释都不会理解:-)所有限定词(const、volatile、restrict)都是关键字;某些关键字(int、if、for)不是限定符。这适用于C和C++。@亚历克斯:*和&是类型的一部分,而不是资格。这就是为什么可以使用static_cast和const_cast添加或删除限定符,但不能将t转换为t*。。。它们只是根本不同的东西。类似地,静态和外部存储限定符不会影响数据的类型。。。就我所知,质询者指的是前面提到的关键词,而不是你所说的“为后面的内容添加质量”。如果我错了,请教我,但至少关于康斯特我很确定@Tony D但问题是如果有人认为它合格,那么接下来的内容他会写

char const*var
,但它只会合格,以防前面没有任何内容。所以,如果你想要一个指向非常量对象的指针,你必须写
char*const-var
,而这是大部分人忘记的;)只是想添加。关键字不是主语言语法中的标识符,而是仅用于p