C++三元运算符执行条件

2023-12-26

我不确定 C / C++ 三元运算符的执行保证。
例如,如果给我一个地址和一个布尔值来判断该地址是否适合读取,我可以使用 if/else 轻松避免读取错误:

int foo(const bool addressGood, const int* ptr) {
    if (addressGood) { return ptr[0]; }
    else { return 0; }
}

然而,三元运算符 (?:)保证ptr不会被访问,除非addressGood是真的?
或者优化编译器可以生成访问的代码ptr在任何情况下(可能会使程序崩溃),将值存储在中间寄存器中并使用条件赋值来实现三元运算符?

int foo(const bool addressGood, const int* ptr) {
    // Not sure about ptr access conditions here.
    return (addressGood) ? ptr[0] : 0;
}

Thanks.


是的,该标准保证ptr仅在以下情况下才被访问addressGood是真的。看这个答案 https://stackoverflow.com/a/14763151/2530166关于该主题,引用了标准:

条件表达式从右到左分组。第一个表达式根据上下文转换为 bool(第 4 条)。对其进行求值,如果为真,则条件表达式的结果是第二个表达式的值,否则为第三个表达式。仅计算第二个和第三个表达式之一。与第一个表达式相关联的每个值计算和副作用都在与第二个或第三个表达式相关联的每个值计算和副作用之前排序。

(C++11 标准,第 5.16/1 段)

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

C++三元运算符执行条件 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 按成员序列化

    我已经实现了template
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 在 UINavigationBar 上创建一个自定义左后按钮,左侧带有标准箭头

    当我创建自定义后退按钮时 我使用以下代码 UIBarButtonItem leftButton UIBarButtonItem alloc initWithTitle Yeah style UIBarButtonItemStyleBorde
  • 将 UITabBarController 与 UINavigationController 结合起来

    我尝试使用带有导航栏的 选项卡式应用程序 默认情况下 选项卡栏工作正常 但我只是无法获得导航栏 我发现了一些关于推动导航栏之类的东西 但我发现的所有东西都是几年前的 所以不要帮助我 而且最近的东西已经过时了 自从iOS5和新版本的Xcode
  • matplotlib 中共享轴方形子图的新 pythonic 风格?

    相关 在 matplotlib 中绘制具有固定限制的自动缩放子图 https stackoverflow com questions 13612610 plotting autoscaled subplots with fixed limi
  • 跟踪电子邮件以真实图像打开

    我正在考虑将电子邮件跟踪添加到我为小型客户企业构建的网络服务中 我打算做嵌入式图像解决方案 参考我服务器上的图像 除非其他人有更好的方法 但是当我使用图像标签引用服务器上的 PHP 页面时 它会加载 损坏的图像 图标 我怎样才能使它成为有效
  • 如何在material-ui中使用伪选择器?

    我一直在努力实现简单的事情 我试图显示 隐藏我的
  • 在 Xcode 4 中将项目添加到工作区时出现问题

    我前段时间在 Xcode 3 2 x 下启动了几个项目 几天前我切换到 Xcode 4 并希望将工作区功能用作这两个项目 基本上 我的计划是从两个项目中提取一些共同的功能 并使它们成为两个项目所依赖的公共库 然而 在我接触到棘手的依赖关系之
  • 如何在 Angular 中注册触摸移动事件?

    总结一下问题 堆栈闪电战 https stackblitz com edit angular touch playground https stackblitz com edit angular touch playground 我正在尝试
  • SQL Server NText 字段限制为 43,679 个字符?

    我使用 SQL Server 数据库来存储很长的 Unicode 字符串 该字段来自 ntext 类型 理论上应限制为 2 30 个 Unicode 字符 From MSDN 文档 https msdn microsoft com en u
  • nginx:将所有请求发送到单个html页面

    使用 nginx 我想保留 url 但无论如何实际上都会加载相同的页面 我将使用该网址History getState 在我的 javascript 应用程序中路由请求 看起来这应该是一件很简单的事情吧 location rewrite b
  • 重定向弹出窗口并发布消息

    我陷入了一个问题 我必须从弹出窗口重定向到不同的域并向其发布消息 这是场景 用户打开一个新的弹出窗口 该窗口位于同一域中 例如 http doamin one com http doamin one com 用户在弹出窗口中填写表格并单击提
  • 当程序有命令行参数时,如何使用 GDB 分析程序的核心转储文件?

    我的程序是这样运行的 exe p param1 i param2 o param3 它崩溃并生成一个核心转储文件 core pid 我想通过以下方式分析核心转储文件 gdb exe p param1 i param2 o param3 co
  • 如何将 i18n 用于一种语言 cakephp

    我如何设置 i18n 才能翻译成西班牙语 我不希望用户更改应用程序上的语言 所以我只需要用户以西班牙语查看该应用程序 我认为不需要任何路由 我是对的吗 如果您的网站只有一种语言 只需将西班牙语文本直接写入需要的视图文件中即可 无需加倍工作
  • 在 Dockerfile 中如何从网络驱动器复制文件

    我在以下位置托管了一个文件 无法更改 somenetwork somefiles myfile In my Dockerfile我想 COPY somenetwork somefiles myfile opt files file 有没有办
  • 如何以编程方式(在运行时)滑动 RecyclerView 的一行?

    我有一个 RecyclerView 里面有这样的项目 I use ItemTouchHelper SimpleCallback监听 swipe 和 onChildDraw 以在项目被滑动时绘制画布 再多滑动一下 我的问题 我想仅在项目列表中
  • gtk_box_pack_start 和 gtk_container_add 有什么区别?

    在我看来 这两个函数都可以用来向容器添加一些小部件 有什么不同 gtk pack start让您可以更好地控制子窗口小部件如何分配空间 您可以控制子窗口小部件是否 扩展 分配任何额外空间 填充 使用所有分配的空间或仅使用它们请求的最小空间
  • JavaScript - 将带有方法的对象保存为字符串

    我一直在寻找一种方法来做到这一点 但似乎找不到任何东西 我有不同的配置对象 我需要将它们保存为变量中的文本以便稍后进行处理 这里是一个示例 object args config config next null final delimite
  • 阅读此 XML 的好方法是什么?

    阅读此 XML 的好方法是什么 或者也许我可以以不同的方式构建 XML 我想要的是流程成为主要内容 然后您可以遵循任意数量的相关流程
  • 如何阻止 favicon.ico 请求?

    我没有 favicon ico 但我的浏览器总是发出请求 是否可以阻止浏览器从我的网站发出对网站图标的请求 也许 HTML 标头中有一些元标记 我首先要说的是 在网页中拥有网站图标是一件好事 通常 然而 这并不总是理想的 有时开发人员需要一
  • 错误:(gcloud.services.enable)用户无权访问项目(或者可能不存在):调用者没有权限

    我希望编写一个可以从 Cloud Shell 运行的脚本 以便在所有项目中启用 API 它正在成功地完成每个项目 但我收到每个项目都被拒绝的消息 我是所有者 所以不应该有任何许可问题 作为权限测试 如果我仅运行 gcloud service
  • C++三元运算符执行条件

    我不确定 C C 三元运算符的执行保证 例如 如果给我一个地址和一个布尔值来判断该地址是否适合读取 我可以使用 if else 轻松避免读取错误 int foo const bool addressGood const int ptr if