const
和volatile
称为cv-qualifier
。
specifier
和qualifier
(cv-qualifier
)之间的确切差异是什么?限定符也是一个说明符吗?
qualifier
是否只需要左值?
cv-qualifier
以外的限定符是什么?
我的上述理解是否有意义?
答案 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-类型的非限定版本 不同类型;但他们应该 有相同的表示和 对齐要求。
虽然没有明确说明,但上段显示了不同之处。我承认这些定义可能更严格。