const
并由C 规范volatile
调用。cv-qualifier
specifier
和qualifier
( )之间到底有什么区别cv-qualifier
?限定符也是说明符吗?
是否有必要qualifier
仅使用左值?
除了 之外还有什么限定词cv-qualifier
?
我的上述理解有意义吗?
大部分没有意义。
说明符和限定符在 C++ 标准中定义。限定符只是说明符的一个组成部分。例如,声明中的类型说明符可以包括cv-qualifiers。我看不出有理由引用该主题的标准中的所有内容。
Cv 限定符不限于左值。类类型的右值也可以是 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++ 中也是左值,但你不能修改函数。
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 非限定版本是不同的类型;但是,它们应具有相同的表示和对齐要求。
虽然没有明确说明,但上面的段落显示了差异。我承认定义可能更严格。