const 限定转换

发布于 2024-12-07 07:47:49 字数 458 浏览 1 评论 0原文

从 (4.4/1 ) 读取

“指向 cv1 T 的指针”类型的右值可以转换为 如果“cv2 T”比“cv1 T”更符合 cv 条件,则键入“pointer to cv2 T”。

我不知道标准在哪里定义了“更多 cv 限定字段”类型,但据我了解,const 声明符比非 const 声明符更符合 cv 限定条件。

对于以下转换,标准中的引用如何适应,或者您如何知道哪一个更符合简历要求?

int *const c1 = 0;
int const* c2 = 0;
const int *const c3 = 0;

c1 = c2; // allowed
c1 = c3; // allowed

更新:

c2 = c1;
c2 = c3;

From (4.4/1 ) It reads

An rvalue of type “pointer to cv1 T” can be converted to an rvalue of
type “pointer to cv2 T” if “cv2 T” is more cv-qualified than “cv1 T.”

I don't know where the standard defines 'more cv-qualifield' type but as I understood a declarator with const is more cv-qualified than than a non-const.

For following conversions, how does the quote from standard fits in or how you know which one is less or more cv-qualifed?

int *const c1 = 0;
int const* c2 = 0;
const int *const c3 = 0;

c1 = c2; // allowed
c1 = c3; // allowed

Update:

c2 = c1;
c2 = c3;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无敌元气妹 2024-12-14 07:47:49

3.9.3/4 中的表 6 给出了 cv 限定符的部分排序,3.9.3/4 还给出了更多 cv 限定符的定义。

  • 没有简历限定符 < const
  • 无简历限定符 易失性
  • 没有简历限定符 const 易失性
  • const const 易失性
  • 易失性 常量易失性

Table 6 in 3.9.3/4 gives the partial ordering of cv-qualifiers and 3.9.3/4 also gives the definition of more cv-qualified.

  • no cv-qualifier < const
  • no cv-qualifier < volatile
  • no cv-qualifier < const volatile
  • const < const volatile
  • volatile < const volatile
只怪假的太真实 2024-12-14 07:47:49

由于c1 是一个const 指针变量(与指向常量数据的指针不同),因此无法对其进行修改。因此,这两项分配都是非法的。

该标准指的是这种情况:

int *d1 = 0;
const int* d2 = d1; // d2 is more cv-qualified than d1
const volatile int* d3 = d1; // d3 is more cv-qualified than d2

Since c1 is a const pointer variable (which is different to a pointer to constant data), it cannot be modified. Therefore, both assignments are illegal.

What the standard refers to is this case:

int *d1 = 0;
const int* d2 = d1; // d2 is more cv-qualified than d1
const volatile int* d3 = d1; // d3 is more cv-qualified than d2
甜嗑 2024-12-14 07:47:49

我不知道标准在哪里定义了“more cv-qualifield”类型

它是§3.9.3/4

cv 限定符有(部分)排序,因此可以说一个类型比另一个类型更多的 cv 限定。表 6 显示了构成此排序的关系。

表 6——const 和 volatile 的关系

<小时>

没有简历限定符 <常量  
没有简历限定符 <易挥发的   
没有简历限定符 <常量易失性   
常量 <常量易失性   
挥发性<常量易失性  

也就是说,

  • const TT更符合 cv 条件
  • 易失性 TT 更符合简历要求
  • const volatile TT 更符合 cv 条件
  • const volatile Tconst T更符合 cv 条件
  • const volatile Tvolatile T更符合 cv 条件

I don't know where the standard defines 'more cv-qualifield' type

It is §3.9.3/4

There is a (partial) ordering on cv-qualifiers, so that a type can be said to be more cv-qualified than another. Table 6 shows the relations that constitute this ordering.

Table 6—relations on const and volatile


no cv-qualifier  <  const  
no cv-qualifier  <  volatile   
no cv-qualifier  <  const volatile   
const            <  const volatile   
volatile         <  const volatile  

That is,

  • const T is more cv-qualified than T.
  • volatile T is more cv-qualified than T.
  • const volatile T is more cv-qualified than T.
  • const volatile T is more cv-qualified than const T.
  • const volatile T is more cv-qualified than volatile T.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文