当前位置: 首页 > 知识库问答 >
问题:

关于[静态施法]的困惑/13

谭景明
2023-03-14

我无法理解这句话(特别是粗体部分):

类型“指向 cv1 void 的指针”的 prvalue 可以转换为类型为“指向 cv2 T”的 prvalue,其中 T 是对象类型,cv2 是与 cv1 相同的 cv 限定或大于 cv1 的 cv 限定。如果原始指针值表示内存中某个字节的地址 A,并且 A 不满足 T 的对齐要求,则生成的指针值未指定。

int i = 0;
void *vp = &i;
auto *res = static_cast<double*>(vp);

我的问题是:

>

  • resint的地址)指向的地址是否满足 的对齐要求?

    生成的指针 res 是否具有未指定的值?

    当我有这样的东西时:< code>static_cast

  • 共有1个答案

    别旻
    2023-03-14

    res(整数地址)所指向的地址是否满足双精度的对齐要求?

    这将取决于实施情况。很可能不会。通常< code>int的对齐要求小于< code>double的对齐要求。

    例如,在Linux上使用的x86-64 System V ABI上,<code>int</code>具有对齐要求<code>4</code>,而<code>double</code>具有<code>8</code>。

    您可以检查是否满足对齐要求,例如使用以下static_assert

    static_assert(alignof(int) >= alignof(double));
    

    结果指针res是否有未指定的值?

    如果没有满足对齐要求(即static_assert失败),是的。否则它将指向对象i

    当我有这样的东西时:static_cast

    这与代码片段中显示的内容完全相同。

    请注意,即使满足对齐要求,res也不能用于访问它指向的对象的值,因为这将违反指针混淆现象规则。所以转换的结果很可能对任何事情都没有用。

     类似资料:
    • 问题内容: Docker菜鸟在这里,尝试使用Compose设置一个简单的Django项目。过,我已经在此方面取得了成功,但是这次我正在尝试一种不同的设置,但我不知道为什么它不起作用。 我有以下docker-compose.yml文件: 我的/ Dockerfile是: 我的/ docker / web / Dockerfile是: 我的/docker/web/default.conf文件是: do

    • 当您可以调用递归方法而不是必须将递归方法设置为变量时,是否有一种简单的方法来理解? 例如... 只是调用递归函数遍历: self.recurse(node.left) self.recurse(node.right) 必须将递归函数设置为node。左和右。右: 节点。左=自我。递归(node.left) 节点。右=自我。递归(node.left) 另一个例子是删除bst中的一个节点,你必须将递归函

    • 1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把? 2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把? 3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报

    • 问题内容: 在Node.js Express模块​​的代码中,我碰到了这一行,为服务器设置继承: 我不确定这样做是什么- MDC文档(https://developer.mozilla.org/en/JavaScript/Guide/Inheritance_Revisited#prototype_and_ proto )似乎说我可以这样做: 确实,我做了这个测试: 看起来一样吗?所以,是的,我想知

    • 例如,一个方法中有10000次循环。当它运行1000次时,backedge\u计数器触发JIT编译。解释器继续执行。当它循环4000次时,JIT编译完成。 我的问题是,剩余的6000次是如何由解释器执行的,还是如何执行本机代码?或者在下次调用此方法之前不会执行本机代码?下次调用此方法时会发生什么?

    • 但后者给了我下面的例外。这是为什么? java.lang.StringIndexOutOfBoundsException:String index超出范围:1 java.lang.StringIndexOutOfBoundsException:String index超出范围:1 java.lang.String.charat(String.java:658)在Scala.Collection.i