来自指针的 Typedef const 引用[重复]

2024-05-01

可能的重复:
为什么允许将指针强制转换为引用? https://stackoverflow.com/questions/5924248/why-is-it-allowed-to-cast-a-pointer-to-a-reference

为什么会这样编译:

class Bar {};

int main() {
  Bar i;
  Bar *b = &i;
  typedef const Bar& type;
  type t = type(b);
}

G++ (4.5 http://www.ideone.com/huvDG,4.7 快照),Comeau http://www.comeaucomputing.com/tryitout/和 MSVC 都很高兴,但警告未使用的变量。

编译器认为这意味着什么?是UB吗?为什么不是错误呢?

我认为这应该是一个错误,因为我不小心犯了一个Bar* into const Bar&无需解除引用或疯狂的强制转换。我认为这一切都是完全安全的。


C 风格的强制转换依次尝试不同的 C++ 强制转换类型:

[C++11: 5.4/5]: 执行的转换

  • a const_cast(5.2.11),
  • a static_cast(5.2.9),
  • a static_cast随后是一个const_cast,
  • a reinterpret_cast(5.2.10), or
  • a reinterpret_cast随后是一个`const_cast,

可以使用显式类型转换的强制转换表示法来执行。适用相同的语义限制和行为,但在以下情况下执行 static_cast 时,即使基类不可访问,转换也是有效的:

  • [..]

然后遵循各种复杂的规则,我懒得去详细解析。

你会得到必要的警告,说这是一个愚蠢的演员阵容,但既然这是你所要求的,那就是所尝试的。

与之比较:

class Bar {};

int main() {
  Bar *b = 0;
  typedef const Bar& type;
  const type t = static_cast<type>(b);
}

// In function 'int main()':
// Line 6: error: invalid static_cast from type 'Bar*' to type 'const Bar&'
// compilation terminated due to -Wfatal-errors.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自指针的 Typedef const 引用[重复] 的相关文章

随机推荐

  • 为什么组合器输入记录的数量比映射的输出数量多?

    Combiner 在 Mapper 之后 Reducer 之前运行 它将接收给定节点上的 Mapper 实例发出的所有数据作为输入 然后它将输出发送到Reducers 因此组合器输入的记录应小于映射输出的记录 12 08 29 13 38
  • 使用 Powershell 按列拆分 csv 文件

    我是 powershell 的新手 但这看起来是完成此任务的最佳工具 有一个如下所示的 csv 文件 Date mary1 mary2 maryr3 mary4 9 01 2011 1 00 1 39 3 43 3 29 1 83 9 01
  • 定制 odoo 中的会计和财务模块?

    我正在研究会计和财务模块 我想做一些修改 例如隐藏字段和隐藏税收图表 有人能帮我吗 请告诉我隐藏左侧菜单项 税表 的程序 我也想知道view id隐藏发票表中的税费和底部税费 更新 请让我知道隐藏它们的外部 ID 我无法找到它们 因为它们链
  • 为什么我可以使用 ret 退出 main?

    我即将弄清楚程序堆栈到底是如何设置的 我了解到用以下方式调用该函数 call pointer 实际上等同于 mov register pc programcounter add register 1 where 1 is one instr
  • 从 Jquery UI Sortable 中删除项目

    我试图找出从 JQuery UI 可排序列表中删除项目的正确方法 我创建了一个 JSfiddle 来说明我的问题 基本上 我有几个围绕 JQuery UI 可排序小部件的回调 并且我希望在从小部件中删除元素后立即执行这些回调 这样做的正确方
  • SSRS 两个数据集需要在第二个数据集中使用一个数据集的字段作为参数?

    问题在于 包含数据的 in 字段只是从一组存储过程中提取的数据集中的一条记录 不可触摸 然后将其用作第二个数据集中的参数 任何帮助 将不胜感激 添加参数 选择参数可见性为隐藏 转到默认值 下面的屏幕截图 选择 从查询中获取值 然后选择您的第
  • 关闭彩盒

    我有一个简单的弹出窗口 不是 Iframe 用户可以在其中互相发送邮件 有一个用于发送信息的提交按钮和一个用于关闭叠加层的取消按钮 我确实在关闭按钮工作时遇到了一些麻烦 代码如下所示
  • 如何包装 fortran write 语句

    我想包装 fortran写语句 http software intel com sites products documentation doclib stdxe 2013 composerxe compiler fortran lin 在
  • 在 python 中对自定义类执行集合操作

    我想将 Python 的内置 set 类与我创建的自定义类一起使用 如果我愿意 要创建包含自定义类实例的集合 我需要实现哪些函数才能执行测试 例如 set a set b 它可以开箱即用 但是 在某些情况下 过载是有意义的 eq https
  • Vue父组件访问子组件的compute属性

    在 Vue JS 中 当在数组元素 子元素 的计算属性中进行更改时 我无法监视数组的更改 我在编写的 JSFiddle 示例中总结了这个问题 因此该示例在逻辑上可能没有意义 但它确实显示了我的问题 https jsfiddle net tr
  • 数据库中的 GUID 类型

    GUID不是数据库中的正式数据类型 在我们现有的 SQL Server 设计中 Uniqueidentifier类型用于GUID价值 现在我们正在切换到Sybase数据库 我们应该使用varchar 36 来代替那个Uniqueidenti
  • ZonedDateTime 的 Jackson 反序列化问题

    我在反序列化我正在使用的服务期间使用的类中有以下字段 private ZonedDateTime transactionDateTime 我正在使用的服务可能会使用以下模式返回日期或日期时间 yyyy MM dd T HH mm ss SS
  • 打算在 Android 上打开 Instagram 用户个人资料

    我正在开发一款社交网络应用程序 我们的用户可以将他们的 Instagram 帐户连接到我们的服务 我想直接在他们的官方 Android 应用程序 如果已安装 中打开 Instagram 个人资料 但我找不到任何方法来做到这一点 然而 有一个
  • 在 TypeORM 单表继承中更新实体的类型

    有没有办法将继承实体的类型 在数据库中 更改为不同的实体类型 转换实体为uid from OldType to NewType await em update OldType uid uid entityTypeColumnName New
  • .NET 中的 vista/win7 放大 API

    Win7 Vista SDK中有magnification lib可供使用放大API http msdn microsoft com en us library ms692162 28VS 85 29 aspx对于C 如何在 NET win
  • 在 iOS 8 Today 扩展中获取 parse.com 用户数据时出现异常

    我正在尝试获取 PFUser 的 PFObjects 列表以在 iOS 8 Today Widget 中显示 按照此博客文章 http blog parse com announcements introducing local data
  • Java垂直布局?

    我需要将 JLabel 垂直放置在一些 JButton 上 就像游戏菜单一样 它们都应该居中 我已经下载了 MigLayout 但我不知道如何使用它 所以我只是想要一种方法来垂直和居中定位我的组件 无论 MigLayout 与否 另外 我不
  • 如何在嵌套数组中查找叶数组?

    我在 PHP 中有一个嵌套数组 array 0 gt 5x 1 gt array 0 gt 1 gt 2 gt 3 3 gt array 0 gt 1 gt 2 gt array I want to find this one 0 gt 1
  • OCaml 中类型和模块相等的规则是什么

    我无法理解 OCaml 中模块的平等性 函子应该是适用的 这就是互联网所声称的 但这有时似乎会失败 而且我不太明白其背后的一般规则 这是我的示例代码 module type PT sig end module P struct end le
  • 来自指针的 Typedef const 引用[重复]

    这个问题在这里已经有答案了 可能的重复 为什么允许将指针强制转换为引用 https stackoverflow com questions 5924248 why is it allowed to cast a pointer to a r