14

const并由C 规范volatile调用。cv-qualifier

specifierqualifier( )之间到底有什么区别cv-qualifier?限定符也是说明符吗?

是否有必要qualifier仅使用左值?

除了 之外还有什么限定词cv-qualifier

我的上述理解有意义吗?

4

2 回答 2

7

大部分没有意义。

说明符和限定符在 C++ 标准中定义限定符只是说明符的一个组成部分。例如,声明中的类型说明符可以包括cv-qualifiers。我看不出有理由引用该主题的标准中的所有内容。

Cv 限定符不限于左值。类型的右值也可以是 cv 限定的。可以对非类类型的右值进行 cv 限定,但它没有效果并且会被忽略。

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

限定词一词也出现在限定名称的上下文中。像some_class::some_member(或some_namespace::some_name)这样的名称称为限定名称some_class::部分是限定符

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

于 2010-08-31T16:24:52.683 回答
4

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 非限定的完整或不完整对象类型或 void 类型都有其类型的三个对应的 cv 限定版本:一个 const 限定版本、一个 volatile 限定版本和一个 const volatile 限定版本。术语对象类型包括创建对象时指定的 cv 限定符。在 decl-specifier-seq 中存在 const 说明符声明了一个 const 限定对象类型的对象;这样的对象称为 const 对象。decl-specifier-seq 中存在 volatile 说明符声明了一个具有 volatile 限定对象类型的对象;这样的对象称为易失性对象。decl-specifier-seq中两个 cv 限定符的存在 声明一个具有 const-volatile 限定的对象类型的对象;这样的对象称为 const volatile 对象。类型的 cv 限定或 cv 非限定版本是不同的类型;但是,它们应具有相同的表示和对齐要求。

虽然没有明确说明,但上面的段落显示了差异。我承认定义可能更严格。

于 2010-08-31T16:21:03.377 回答