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

Sud*_*rma 12 c++ lvalue

constvolatile被称为cv-qualifier由C规格.

specifierqualifier(cv-qualifier)之间究竟有什么区别?限定符也是一个说明符吗?

是否必须qualifier只有左值?

什么是限定词以外的cv-qualifier

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

AnT*_*AnT 7

大多数没有意义.

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

Cv限定符不限于左值.类型的Rvalues 也可以是cv限定的.可以对非类型的rvalue进行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++中的左值,但是你不能修改函数.


Kor*_*icz 6

cv 限定符一个说明符,实际上是一个类型说明符。

引用C++03 7.1:

声明中可以使用的说明符有

decl-specifier:
  storage-class-specifier
  type-specifier
  function-specifier
  friend
  typedef
decl-specifier-seq:
  decl-specifier-seq_opt
  decl-specifier
Run Code Online (Sandbox Code Playgroud)

...定义类型说明符时:

type-specifier:
  simple-type-specifier
  class-specifier
  enum-specifier
  elaborated-type-specifier
  cv-qualifier
Run Code Online (Sandbox Code Playgroud)

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

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

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