计算出的“goto”是否尊重 C++ 对象的生命周期?

2024-03-25

Regular goto在 C++ 中尊重对象生命周期 - 即使用goto跳出块将为适当的局部变量运行析构函数。

start:
NonTrivial object;
if (again()) goto start;  // will call object.~NonTrivial()

使用时也是如此标签作为值 https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values扩大?

start:
NonTrivial object;
goto *(again() ? &&start : &&end);
end:

GCC 很高兴地接受了这段代码,但似乎忽略了任何影响goto可能有object的一生。铿锵抱怨:

error: cannot jump from this indirect goto statement to one of its possible targets
note: possible target of indirect goto statement
note: jump exits scope of variable with non-trivial destructor   

查找拨打的电话NonTrivial() and ~NonTrivial() in 编译器资源管理器 https://godbolt.org/z/sF66qG.

哪个编译器行为正确?一般来说,是否有可能支持这种间接分支并正确管理对象生存期和 RAII?


哪个编译器行为正确?

由于我们讨论的是GCC的语言扩展,所以不能用C++标准来判断。但可以合理地预期编译器会自动调用这里的析构函数与构造函数相同的次数,或者拒绝像 Clang 一样编译。

一般来说,是否有可能支持这种间接分支并正确管理对象生存期和 RAII?

可能是的,因为 GCC 错误已报告且尚未关闭:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37722 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37722

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算出的“goto”是否尊重 C++ 对象的生命周期? 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何将文本更改为文本输入元素 - jQuery

    我的页面中有一张表格 如下所示 table cellpadding 0 cellspacing 0 style width 100 tr td class field1s field1x td td class field2s field2
  • 启用推送状态和上下文路径路由:在服务器上找不到静态资产

    我使用静态构建包将 React 应用程序部署到 Cloud Foundry 目标是使应用程序可以在domain com 下访问path 所以我根据他的博客文章配置了路线 https www cloudfoundry org context
  • 如何使 Sphinx 尊重使用 __init__.py 将类导入到包中

    我有一个包裹 foo foo py bar py init py foo py 有一个 Foo 类 在 init py 中 我导入了 Foo 类 以便用户可以执行以下操作 from foo import Foo Sphinx 正确地将 Fo
  • 数据库/网站状态的 Web 服务

    我目前正在尝试构建 一个更简单的版本 一个类似于的状态网站亚马逊的服务健康仪表板 http status aws amazon com 基本上 我需要连接大约 3 个数据中心和几个网站 并至少带有向上 向下消息 我最熟悉 C 和一些网络编程
  • 在父 div 中间创建一个 div

    我正在努力保持 chat innerdiv 位于中间 chat maindiv 我可以通过使用百分比值来做到这一点 但我的问题是应该有2px百分比值无法提供的间隙 相对于宽度和高度 为了清楚地理解 请参阅 CSS 代码中的注释 JSbin
  • 如何四舍五入到最接近的千?

    如何将数字四舍五入到最接近的千位 function round var Round it PHP 允许负精度round例如 x round x 3 Uses default mode of PHP ROUND HALF UP 而正精度表示在
  • 如何让d3的translate:translate-drag功能更加流畅?

    In 这个 JSFiddle https jsfiddle net sachid 8d6ht3dL 我已经在 svg 中实现了元素 我希望这组元素可以拖动 并且我已经尝试过d3 drag并使用transform translate 拖动并不
  • 在 AKS 集群中安装 nginx ingress 失败并出现 SyncLoadBalancerFailed 错误

    我有一个带有 Web 应用程序的 AKS 集群 我想配置一个 nginx Ingress 控制器以将应用程序公开到互联网 然后启用 TLS 我一直在关注官方文档 https learn microsoft com en us azure a
  • 当我尝试连接 Box.com 的 API 时,rauth2 解码器无法处理 access_token

    这是我用于连接到 Box 的代码 但我无法让 box storage get auth session data data 工作 从 rauth 导入 OAuth2Service box storage OAuth2Service name
  • 如何在 Android 中处理 3 个嵌套回收器视图中的数据 [Kotlin]

    我有一个由三个回收者视图组成的结构 因此 有一个父回收器视图包含一个子回收器视图 而该子回收器视图又包含一个子回收器视图 为了理解 就像第一个回收者视图是楼层总数 第二个回收者视图是房间总数 第三个回收者视图是设备总数 我有一个房间数据库
  • Objective-C 将数字舍入到最接近的 50

    如何将数字四舍五入到最接近的 X 值 例如 50 IE 47 就是 50 24 将是 0 74 就是 50 99 就是 100 etc 我真的不知道从哪里开始研究如何做到这一点 附 我在 iPhone 上使用 cocoa touch 多谢
  • 使用lambdaify将硬积分转换为lambda函数

    我想对函数进行羔羊化Integral t t t 0 x 它有效 但是我的新函数由lambdify 不返回数字 而仅返回sympy integrals integrals Integral班级 但我不希望这样 我希望它返回一个浮点数 这是我
  • Hibernate 不保存值的集合

    好吧 我现在已经在几个项目中使用了 Hibernate 但在使用它之前我并没有了解它的复杂性 我开始查看使用 JPA 注释并与 Spring 集成的代码 一切运行良好 但现在我想向我的学生教授基本的 Hibernate 并且我正在创建一个示
  • 如何摆脱“从预捆绑文件加载”消息?

    在启动屏幕之后 但在加载应用程序之前 屏幕顶部会出现一条 正在从预捆绑文件加载 消息 持续时间只有几百毫秒 我在开发中不介意这一点 但在手机上运行时我仍然看到此消息 这是我创建捆绑包的方法 有任何想法吗 谢谢 react native bu
  • Cardview Click 未打开活动

    我的问题 no error in this project i can run successful 我的按钮可以在特定时间点击 当我点击回来时 它根本不起作用 我认为我的问题与父母有关 我的项目父级有什么错误 请帮帮我 下面是我的 Jav
  • WCF Web服务流响应的最佳实践

    我正在尝试从 WCF Web 服务中提取大量数据 请求相当小 而响应消息将非常大 目前 由于 IIS6 对其可分配的内存 1 4GB 有限制 Web 服务正在引发 SystemOutOfMemory 异常 我在一些博客中读到 实施流式传输可
  • 如何优雅地降级 CSS 视口单位?

    CSS 视口单位 vw vh vmin vmax 非常棒 我想开始将它们用于字体 但我注意到here http caniuse com viewport units他们没有得到广泛的支持 我尝试在不支持的浏览器中搜索任何用于优雅降级的最佳实
  • ASP.NET MVC 4 参数由正斜杠“/”分隔,未正确传递参数

    我试图遵循许多网站使用的约定 这些网站使用多个正斜杠传递参数 而不是使用 GET 模型 也就是说 我希望使用如下 URL http www foo bar controller action arg1 a arg2 b arg3 c 以这种
  • jquery-select2 ajax搜索在另一个div中显示标签

    我想在另一个 div 中显示所选结果 而不是在输入框中显示 function formatRepo repo if repo loading return repo text var markup div class select2 res
  • 计算出的“goto”是否尊重 C++ 对象的生命周期?

    Regular goto在 C 中尊重对象生命周期 即使用goto跳出块将为适当的局部变量运行析构函数 start NonTrivial object if again goto start will call object NonTriv