"cv-unqualified"在C++中意味着什么?

Ste*_*ini 45 c++

来自主题.我在最近问过的一个问题中看到了这个术语,显然这是一个很好的术语,但我无法在stackoverflow上找到任何东西.

Jos*_*eld 46

有基本类型和复合类型.基本类型是算术类型void,和std::nullptr_t.复合类型是数组,函数,指针,引用,类,联合,枚举和指向非静态成员的指针.

CV-不合格类型是这些类型的任何.

对于任何cv-nonqualified类型,有三种相应的cv限定类型:

  • const-qualified - 使用constcv-qualifier
  • volatile-qualified - 使用volatilecv-qualifier
  • const-volatile-qualified - 使用constvolatilecv-qualifiers

但请注意,应用于数组类型的cv限定符实际上适用于其元素.

cv-qualified和cv-nonqualified类型是不同的.这是int一个独特的类型const int.

  • 哇,我无法理解..为什么它被命名为'cv-unqualified'?如果你在"它是什么"之前首先告诉我们"它意味着什么",那会更好.当然我现在知道cv是针对const和volatile的.. (4认同)

Dir*_*ple 40

如果类型没有任何cv限定符,则类型为"cv-unqualified".一个cv-qualifer是const或者volatile.


Lih*_*ihO 9

cv-unqualified类型是未由任何 cv限定符指定的类型.它们定义了一种类型的两个基本属性:常量波动率.参见 C++ 03 3.9.3 CV-qualifiers§1:

3.9.1和3.9.2中提到的类型是cv不合格类型.每个类型是cv不合格的完整或不完整的对象类型或无效(3.9)有三个相应的cv限定版本的类型:

  • 一个const限定版本,
  • 一个挥发性合格的版本,和
  • 一个常量-volatile限定版本.

术语对象类型(1.8)包括创建对象时指定的cv限定符.

constdecl-specifier-seq中存在一个说明符,声明了一个const限定对象类型的对象; 这样的对象叫做a const object.

volatiledecl-specifier-seq中存在一个说明符,声明了一个volatile限定对象类型的对象; 这样的对象叫做a volatile object.

在declspecifier-seq中存在两个cv限定符都声明了一个const-volatile限定对象类型的对象; 这样的对象叫做a const volatile object.


Ant*_*ine 7

cv代表constvolatile(并且更少mutable),两个属性限定类型.您可以std::remove_const在C++ 11中使用它们来操作它们.

优秀的cppreference网站为您提供更多信息.

为了回答你的问题,cv-unqualified类型要么没有,要么从cv-qualifiers中删除.例如int,cv不合格的部分const volatile int.

std::remove_cv<T>::type是不合格的部分T.

  • 它不是.问题的标题并没有传达其内容.我想要任何有同样问题的人,就像我去谷歌那样问"cv不合格是什么意思"并得到这个问题,在那里可以清楚地解释.另一方面,我认为stackoverflow社区的这种类似食人鱼的行为反对合理但"感知容易"的问题是非常令人讨厌的,如果有替代方案,我已经转换了.冷静该死的人 (3认同)

Jer*_*fin 5

一般来说,它的意思是“相同的类型,但删除了任何 cv 限定符”,因此(例如)cv 的非限定版本void volatile * const x将是void *x.

但请注意,这里我从指针本身及其指向的内容中删除了 cv 限定符。在大多数情况下,cv-unqualified一次仅引用一个对象,因此指针本身的无 cv 限定版本仍将是void volatile *x,而它所指向的内容的无 cv 限定版本将是void *const x