C++ 说明符和限定符之间的相关性?
C++ 说明符和限定符之间的相关性?,c++,lvalue,C++,Lvalue,const和volatile被C规范称为cv限定符 说明符和限定符(cv限定符)之间到底有什么区别?限定符也是说明符吗 限定符是否必须仅具有左值 除了cv限定符,还有什么限定符 我的上述理解有意义吗?cv限定符是一个说明符,实际上是一个类型说明符 引用C++037.1: 可以在声明中使用的说明符有 。。。定义类型说明符时: type-specifier: simple-type-specifier class-specifier enum-specifier elaborated
const
和volatile
被C规范称为cv限定符
说明符
和限定符
(cv限定符
)之间到底有什么区别?限定符也是说明符吗
限定符
是否必须仅具有左值
除了cv限定符
,还有什么限定符
我的上述理解有意义吗?cv限定符是一个说明符,实际上是一个类型说明符 引用C++037.1: 可以在声明中使用的说明符有 。。。定义类型说明符时:
type-specifier:
simple-type-specifier
class-specifier
enum-specifier
elaborated-type-specifier
cv-qualifier
至于单词说明符和限定符之间的区别:
每种类型
简历不合格是完整的还是完整的
对象类型不完整或无效
有三个对应的
其类型的cv限定版本:a
const限定版本,a
volatile限定版本,以及
const volatile限定版本。这个
术语对象类型包括
当
对象被创建存在一个
a中的常量说明符
decl说明符seq声明一个对象
常量限定对象类型的属性;这样的
对象称为常量对象。这个
在一个实例中存在易失性说明符
decl说明符seq声明一个对象
易失性限定对象类型;
这样的对象称为volatile
对象两者的存在
decl说明符seq中的cv限定符
声明的对象
常量volatile限定对象类型;
这样的对象称为常量volatile
对象简历合格或
类型的cv非限定版本为
不同类型;但是,他们应当
具有相同的代表性和
对齐要求
虽然没有明确说明,但上面一段说明了区别。不过,我承认这些定义可能更为严格。其中大部分没有意义
说明符和限定符在C++标准中定义。限定符只是说明符的一个组成部分。例如,声明中的类型说明符可以包括cv限定符。我看不出有什么理由引用标准中关于这个主题的所有内容
Cv限定符不限于左值。类类型的R值也可以是cv限定值。可以对非类类型的右值进行cv限定,但不会产生任何效果,将被忽略 示例中使用foo
的const
限定符只是一种语法形式,这实际上意味着const限定符应用于foo
方法的隐含this
参数:const a*this
。也就是说,在这种情况下,它确实限定了左值,但它是*this
,而不是foo
术语限定符也出现在限定名称的上下文中。像some_class::some_member
(或some_namespace::some_Name
)这样的名称称为限定名,some_class::
部分是限定符
如果某事物是左值,那么你可以修改它的想法是完全错误的。有可修改的左值和不可修改的左值。声明为
const int i=5
的对象是左值,但不能修改它。普通函数也是C++中的LValk,但是你不能修改函数。 + 1,“我看不出引用这个主题的所有标准的理由。”有时,我想知道人们是否认为仅仅包含一些随机的标准引语就可以减少他们的答案的错误(我不是在说这个帖子,但是有很多有趣的答案帖子,很遗憾,情况就是这样)。嘿,有人证明了我昨天所说的:谢谢你的准确回答。在您引用的段落中,我被这两个词的混合使用弄糊涂了:“……在decl说明符seq中存在常量说明符……在decl说明符seq中存在易失性说明符……在decl说明符seq中存在两个cv限定符……”。由于本段附近没有语法定义,“const”和“volatile”是否是说明符或限定符(或者限定符是说明符的特定大小写,反之亦然)并不明显。再次感谢。
type-specifier:
simple-type-specifier
class-specifier
enum-specifier
elaborated-type-specifier
cv-qualifier