我无法理解这句话(特别是粗体部分):
类型“指向 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);
我的问题是:
>
res
(int
的地址)指向的地址是否满足
的对齐要求?
生成的指针 res
是否具有未指定的值?
当我有这样的东西时:< code>static_cast
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