说明符和限定符之间的相关性?

时间:2010-08-31 16:09:32

标签: c++ lvalue

C规范将{p> constvolatile称为cv-qualifier

specifierqualifiercv-qualifier)之间的确切差异是什么?限定符也是一个说明符吗?

qualifier是否只需要左值?

cv-qualifier以外的限定符是什么?

我的上述理解是否有意义?

2 个答案:

答案 0 :(得分:7)

大部分没有意义。

Specifier 限定符在C ++标准中定义。 限定符只是说明符的组成部分。例如,声明中的类型说明符可以包含 cv-qualifiers 。我没有看到引用该主题标准的所有内容的原因。

Cv限定符不限于左值。 class 类型的Rvalues也可以是cv限定的。可以对非类型的右值进行cv限定,但它不起作用,将被忽略。

您在const示例中显示的foo限定符的使用只是一种语法形式,实际上意味着const限定符应用于隐含的this参数foo方法:const A* this。即在这种情况下,它确实符合左值,但它是*this,而不是foo

术语限定符也出现在限定名称的上下文中。 some_class::some_member(或some_namespace::some_name)之类的名称称为限定名称some_class::部分是限定符

如果某个东西是左值,那么你可以修改它是完全错误的。有可修改的左值和不可修改的左值。声明为const int i = 5的对象是左值,但您无法对其进行修改。普通函数也是C ++中的左值,但是你不能修改函数。

答案 1 :(得分:3)

cv-qualifier 一个说明符,实际上是一个类型说明符。

引用C ++ 03 7.1:

可以在声明中使用的说明符是

decl-specifier:
  storage-class-specifier
  type-specifier
  function-specifier
  friend
  typedef
decl-specifier-seq:
  decl-specifier-seq_opt
  decl-specifier

...虽然定义了类型说明符:

type-specifier:
  simple-type-specifier
  class-specifier
  enum-specifier
  elaborated-type-specifier
  cv-qualifier

至于单词说明符和限定符之间的区别:

  

每种类型   是一个不合格的完整或   不完整的对象类型或无效   有三个对应的   其类型的cv限定版本:a   const限定版,a   volatile限定版本,和   const-volatile-qualified版本。该   术语对象类型包括   cv-qualifiers时指定的   对象已创建。 存在   const中的const说明符   decl-specifier-seq声明一个对象   const限定对象类型;这样   object被称为const对象。该   存在一个易失性说明符   decl-specifier-seq声明一个对象   volatile限定对象类型;   这样的对象称为volatile   宾语。两者的存在    decl-specifier-seq 中的cv限定符   声明一个对象   const-volatile-qualified对象类型;   这样的对象称为const volatile   宾语。 cv合格或   cv-类型的非限定版本   不同类型;但他们应该   有相同的表示和   对齐要求。

虽然没有明确说明,但上段显示了不同之处。我承认这些定义可能更严格。