gpt4 book ai didi

c++ - 为什么允许将整型、枚举和成员指针类型reinterpret_cast 为自身?

转载 作者:行者123 更新时间:2023-12-02 08:30:29 25 4
gpt4 key购买 nike

this recent question ,我们看到不允许 reinterpret_cast一些自定义类类型实例本身; struct A{}; reinterpret_cast<A>(A{});无效(只能通过引用或指针起作用)。这似乎是有道理的,因为缺乏需要进行此类身份转换的现实场景。

查看对应的标准条款,我们在[expr.reinterpret.cast]中有(强调我的):

1 [...] Conversions that can be performed explicitly using reinterpret_­cast are listed below. No other conversion can be performed explicitly using reinterpret_­cast.

2 [...] An expression of integral, enumeration, pointer, or pointer-to-member type can be explicitly converted to its own type; such a cast yields the value of its operand.

所以reinterpret_cast<int>(42)是允许的,而与 struct A{} 相同的 Actor 阵容不是。为什么?

最佳答案

这是解决 DR 799 的一部分。问题如下:

The note in 8.2.10 [expr.reinterpret.cast] paragraph 2 says,

Subject to the restrictions in this section, an expression may be cast to its own type using a reinterpret_cast operator.

但是,规范文本中没有任何内容允许这种转换,并且 第 1 款禁止任何未经明确允许的转换。

笔记中的想法被认为是有值(value)的,即 reinterpret_cast应该允许进行身份转换。所以你问的规范性文本已经添加了。我可以假设对某些基本类型的限制是谨慎的第一步(甚至可能是唯一的步骤)。因为它不会打开与类类型相关的蠕虫 jar 头,并且不需要调用它们的构造函数。 reinterpret_cast一切都是为了不创建新对象,并且可以使用基本类型来做到这一点。不确定这同样适用于类类型。

关于c++ - 为什么允许将整型、枚举和成员指针类型reinterpret_cast 为自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58446304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com