C++ 中指针是否被视为无符号值?

2023-11-29

有符号溢出未定义。无符号溢出定义为模算术。

所以我的问题是,以下是已定义还是未定义:

#include <assert.h>
#include <cstdint>

struct X { int x;/* ... anything ... */ };

X array[3] = { 2, 3, 4 /* or other init values that is compatible with X */};
X* element = array + 1;

std::uintptr_t plus1 = 1;
std::uintptr_t minus1 = 0-plus1;


int main()
{
    printf("%p\n%p\n", element + plus1, array + 2);
    printf("\n");
    printf("%p\n%p\n", element + minus1, array);
    assert(element + plus1 == array + 2);
    assert(element + minus1 == array);
}

虽然我声明plus1/minus1,我的意思是任何+/-值。如果我理解正确的话,这应该可行。我对么?


指针运算是在抽象机中定义的。

在抽象机器中,ptr+x仅在以下情况下有效ptr存在于一个对象中,因此它的地址位于-x的边缘。

这个抽象机器不关心指针或有符号或无符号整数的具体大小。在这个抽象机器中,有符号和无符号整数的值是实整数,或未指定的值。

minus1与 32 位uintptr_t等于0xffffffff,一个大的正整数。

Does element一个对象内的点足够大,以至于 0xffffffff*sizeof(X) 之后它仍然在该对象内?不,不是的。

So element+minus1是一个未定义的操作。任何事情都可能发生。

在您的硬件上,将指针算术简单地解释为机器代码may导致其缠绕。但依赖于此并不安全。

一方面,优化器有时喜欢证明事情。如果他们证明element大于array的地址,那么没有未签名的补充element可以使其等于array。所以编译器可以优化element+unsigned value == array to false.

如果您更改优化设置、升级编译器或完全无害的事情(例如更改内联位置或其他内联代码、链接时优化的启发式方法或月相变化),则可能会发生此类优化。

依赖它工作是危险的,即使它确实如此,因为你现在负责审计的不是源代码,而是它生成的机器代码。

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

C++ 中指针是否被视为无符号值? 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 私有模板函数

    我有一堂课 C h class C private template
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 在 Python 3 中使用 ANSI 序列确定终端光标位置

    我想编写一个小脚本 将图像打印到终端 usr lib w3mimgdisplay 就像在 mac osx 中一样lsi 因此 当脚本启动时 我需要实际的光标位置 或插入符号位置 到目前为止 我想出了用 ANSI 序列获取 shell 中光标
  • 如何使用 Group By 和自连接返回每日最低、最高、开盘价和收盘价结果集?

    SOLVED 堆栈溢出万岁 当我离开时 人们留下了 2 个解决方案 谢谢大家 为两个可行的解决方案分发业力的协议是什么 这是我回来发布的解决方案 它源自另一个 StackOver 解决方案 如何使用聚合函数在MySQL查询中获取分组记录的第
  • 可空对象必须有一个值#2

    我试图重用我一直使用的相同代码 但现在遇到错误 我正在循环访问各种用户表 并在其中执行以下操作 DateTime dcdt DateTime u DateCreated DateTime lldt DateTime u LastLogon
  • 如何使用js移动输入中的文本

    我只是使用 js 来设置文本输入的值 但是 当文本长度超过输入可容纳的长度时 多余的文本将隐藏在输入的右侧部分 如何像正常打字一样隐藏左侧区域多余的文字 原谅我糟糕的英语 当您执行此操作时 您的插入符位置位于文本的开头 您需要将插入符位置移
  • 使用 common lisp 展平列表

    我正在读 Paul Graham 写的 On Lisp 一书 在第 4 章 实用函数 中 他给出了对列表进行操作的小函数的示例 这在编写较大的程序时会很有帮助 其中之一是flatten 给定任意级别的嵌套列表作为参数 展平将删除所有嵌套元素
  • 改进 HoughLines 以进行水平线检测(Python、OpenCV)

    我有这个源图像 我的目标是删除底线 同时保持字母 数字不变 这是我使用的代码 import cv2 import numpy as np img cv2 imread src png gray cv2 cvtColor img cv2 CO
  • 在 Cassandra 中存储值列表

    版本相关 这个问题的一些答案涉及旧版本的 Cassandra 此类问题的正确答案取决于您使用的 Cassandra 版本 我有一个个人资料列族 想要在每个个人资料中存储技能列表 我不确定这在 Cassandra 中通常是如何完成的 一种选择
  • Python Glassdoor API

    我正在尝试使用 Python 从他们的 API 中获取 glassdoor 数据 import urllib2 id1 x key y action employers company company basepath http api g
  • 在 Flask 中,我在哪里定义 url_for() 使用的域?

    当我打电话时url for index 它会生成 但有时我希望它生成 domain tld 反而 我在文档中找不到指定这一点的位置 我只需要做吗 domain tld s url for index url for需要一个 external
  • 编译器正在创建额外的类文件,其中包含 $

    我正在使用 Eclipse 并使用 SWT 编写了一个 Java 应用程序 当 Eclipse 编译我的程序时 它将我的主文件重命名为 4 个不同的文件 如下所示 主文件 class 主文件 1 class 主文件 2 class 主文件
  • VBA - 将上传的 .csv 文件名放入特定工作表的单元格中

    我想知道是否有一种方法可以获取所选的 csv 文件并将名称放入 摘要 表上的单元格中 以下是上传 csv 文件的代码 Dim ws As Worksheet strFile As String Set ws ActiveWorkbook S
  • JavaScript 数组拼接与切片

    有什么区别splice and slice const array 1 2 3 4 5 array splice index 1 array slice index 1 splice 改变原始数组 而slice 不 但它们都返回数组对象 请
  • rm() 似乎没有清空我的 R 工作区

    我正在尝试清理我的 R 工作区 我在任何线程中发现的任何东西似乎都不起作用 我已经在谷歌上搜索并尝试了几个小时的解决方案 当我打开 R 并输入ls 控制台显示上一个会话中的所有代码 function name pos 1L envir as
  • 如何循环遍历字符串并打印某些项目?

    lst AB CD EF GH 输出 A B CD E F GH 这是我尝试过的 但它不起作用 while index lt len my string curr char my string index if curr char whil
  • 如何使用 Groovy 元编程重写 java 类型实例的方法?

    我试图在 Groovy 代码中重写 java 类型实例的方法的功能 但遇到了类转换异常 我看了张贴的指南here但我无法让它工作 由于我的实际问题有点混乱 下面是一些可运行的示例代码 但由于相同的错误而失败 在示例中 我想重写 java l
  • 范围内非重复随机查找算法

    我正在寻找一种有效的算法 可以生成一定范围内的随机值 而不重复 在伪代码中 在 Rand 类中 Rand long from long to this from from this to to long getNumber returns
  • 如何使用 Firebase 存储移动文件?

    有没有办法用 firebase storage 移动文件 例子 user1 public image jpg 到 user1 private image jpg 由于 Firebase Storage 由 Google Cloud Stor
  • Meteor 仅将授权模板发送给客户端

    我知道流星会编译模板给客户端 使用meteor auth系统 是否有一种方法仅在用户有权查看模板时才发送模板 因此在客户端检查html代码时它们不可见 例如 我们不想总是将管理部分发送到浏览器 例如 如果我有
  • 从 IE 中的下拉菜单中选择一个选项并触发一个函数

    所以 我是 VBA IE 自动化的新手 我会尝试非常具体地回答我的问题 最近 我一直在尝试登录一个网站 然后从下拉列表中选择一个月 我可以从下拉列表中选择一个选项 但是 当我单击搜索按钮时 显示的结果不是我使用 VBA 选择的值 而是网页上
  • C++ 中指针是否被视为无符号值?

    有符号溢出未定义 无符号溢出定义为模算术 所以我的问题是 以下是已定义还是未定义 include