C++ 中的参考初始化

2023-11-30

大家好!

检查我自己的代码,我发现了这一有趣的行:

const CString &refStr = ( CheckCondition() ) ? _T("foo") : _T("bar");

现在我完全不知所措,不明白为什么它是合法的。据我了解,必须使用右值或左值初始化 const 引用。未初始化的引用不能存在。但 ()?运算符在为引用赋值之前执行 CheckCondition() 函数。我现在可以看到,当执行 CheckCondition() 时, refStr 存在,但仍未初始化。如果 CheckCondition() 抛出异常或使用 goto 语句传递控制会发生什么?它会使引用未初始化还是我遗漏了什么?


你错过了一些东西 - 它是完全合法的代码,事实上,这样的代码是条件运算符最常见和最好的用途之一。认为编译器必须在内部按照代码在页面上布局的顺序执行操作的想法总是错误的 - 它完全可以自由地评估条件运算符(这只是另一个表达式),然后使用结果来执行初始化。

至于 goto,无法在初始化中使用 goto。如果抛出异常,则该引用将被视为从未创建过。

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

C++ 中的参考初始化 的相关文章

随机推荐

  • 在 LibGDX 中渲染透明网格

    构建打开本教程 https code google com p libgdx wiki ProjectionViewportCamera我构建了一个用于生成多边形网格的类 但我无法弄清楚如何渲染半透明 即使教程中的网格采用带有 Alpha
  • 如何使用 XMLUnit 详细差异忽略相同元素的顺序?

    我想使用 XMLUnit 比较两个 xml 文件 我希望详细差异不将不同顺序的相同标签报告为差异 例如 如果我使用这两个片段创建了DetailedDiff a b b a
  • 如何在 iOS 中通过 Xcode 集成和使用 FFmpeg 库?

    我想使用 FFMpeg 库进行视频处理活动 从 2 天开始我就致力于编译该库并将其与 Xcode 8 和 Swift 集成 我尝试了以下链接 但没有成功 谁能帮助我如何实现这一目标 FFMPEG 在 iphone ipad 项目上的集成 h
  • 如何将 ZIP 文件导入 Android Studio?

    当我尝试导入ZIP文件夹 to the 安卓工作室 我总是收到消息 无法从 导入任何东西 所有 ZIP 文件都会出现该短语 但我找不到该问题的任何解决方案 ZIP 文件来自教程 那么如何将这些文件导入到AS呢 我希望你可以帮助我 解决了 感
  • VB6 PictureBox SavePicture - 将图片保存为png?

    使用VB6 PictureBox 如何保存为png格式 你不能 VB6 PictureBox 仅支持位图 图标 图元文件 GIF 和 JPEG 图像类型 如果您想处理 PNG 文件 则需要使用其他工具 或许是Windows 图像采集自动化库
  • 线程安全/可重入 bison + flex

    与任何解释相比 我真的更喜欢一个工作示例 到目前为止 我在 Bison 文档网站上读到的内容与 Flex 所说的内容相矛盾 一说要申报yylex as int yylex yyscan t yyscanner 另一位希望它是 int yyl
  • 如何增加hdfs容量

    如何将 hadoop DFS 的配置容量从默认的 50GB 增加到 100GB 我目前的设置是在 centOS6 机器上运行 hadoop 1 2 1 使用了 120GB 或 450GB 已使用 Hadoop 权威指南第 3 版 建议的 c
  • 为什么 OmniThreadLibrary 的 ForEach 会阻塞主线程?

    使用 OmniThreadLibrary 和 Delphi XE4 我希望运行多个线程在后台处理数据 从而提高现有代码的速度 当调用下面的过程时 应用程序 GUI 停止处理任何输入 直到所有线程完成 我的理解是使用 NoWait即使线程正在
  • 使用 HtmlAgilityPack 解析 HTML 页面

    使用 C 我想知道如何从此示例 html 脚本获取文本框值 即 john td class texte width 50 div align right Name b b div td td width 50 td
  • NSURLSession 在使用 Objective-C 的 Watch OS2 上将数据返回为 Null

    这在 iPhone 模拟器和设备 上完美运行 但在 Watch OS2 上我得到空白数据 这可能有什么问题 NSURLSession session NSURLSession sharedSession NSURLSessionDataTa
  • 使用 php 和 simplexml 对 XML 节点重新排序

    我的页面当前正在更新现有的 xml 问题是当它添加新节点时 它们会转到 xml 或父标记的末尾 即
  • 未从 System.Runtime.InteropServices.Marshal C# 中找到 GetActiveObject 的定义

    我正在尝试连接到正在运行的 Excel 实例 但是当我尝试使用以下代码片段时 using Microsoft Office Interop Excel using System Runtime InteropServices public
  • 仅打印屏幕活动窗口

    我正在编写一个简单的 Windows 窗体实用程序来截取整个屏幕或活动窗口的屏幕截图并保存文件 winform 有一个名为 Capture 的按钮 单击该按钮即可截取屏幕截图 我的代码完全适用于整个屏幕 但无法弄清楚活动窗口的代码 根据我当
  • 如何将函数序列化为 json(使用 razor @

    如何将客户端函数序列化为 json 对象 类似于剑道控制的工作原理 这就是我到目前为止所拥有的 View Html TestControl
  • 截然不同的输出 C++ 蒙特卡洛近似

    使用随机数生成器对 Pi 进行 C 近似 输出在运行 Ubuntu 的 AMD 64 机器上完全按照预期工作 但是在我的学校机器上 我实现的第二个算法被破坏了 并且希望了解其中的原因 代码如下 ifndef RANDOMNUMBER H d
  • Chrome Ext 和 JQuery 资源必须列在 web_accessible_resources 清单键中,以便由扩展程序外部的页面加载

    我有 Chrome 扩展 可将 jquery 1 8 3 min js 和 jquery ui js 和 jquery ui base64 css 加载到内容脚本中 我在内容脚本中使用它们NOT后台脚本 我设置了配置 我认为 正确 但是当我
  • 为什么 SwiftUI 中的原始 View 没有主体?

    The View协议需要一个body财产 public protocol View associatedtype Body View ViewBuilder var body Self Body get 为什么 SwiftUI 中的一些内置
  • 将所有 PDF 字段设置为只读

    在 iTextSharp 中 有没有办法将表单上的所有字段设置为只读 目前我正在单独设置每一个 这很痛苦 formFields SetFieldProperty Applicant Phone setfflags PdfFormField
  • 禁用长按后退按钮(标注菜单)[重复]

    这个问题在这里已经有答案了 iOS14 引入了长按后退按钮 可打开一个标注菜单以返回到堆栈中的特定 VC 我想禁用它 是否有可能做这样的事情 如果是的话如何 Thanks 尝试设置backButtonDisplayMode to minim
  • C++ 中的参考初始化

    大家好 检查我自己的代码 我发现了这一有趣的行 const CString refStr CheckCondition T foo T bar 现在我完全不知所措 不明白为什么它是合法的 据我了解 必须使用右值或左值初始化 const 引用