允许投射(双*)到(双**)
Casting (double *) to (double **) allowed?
本文关键字:许投射 更新时间:2023-10-16
因为我关注了一个讨论,其中被告知"通过不兼容的指针类型混叠是未定义的行为"(例如 double d; int *p = (int *)&d;
以下问题:
是否允许对(double **)
投(double *)
,例如 double *d1; double **d2 = &d2
并使用语法,例如d2[0][y]
期望与d1[y]
相同?
我知道它并不完全是通过不兼容的指针类型混叠,但我不确定。背景是我想要一个在二维数组(= 图像(上运行的函数,但我希望只能传递图像的一行或一列。
double**
与double*
不兼容。 转换是合法的,但您唯一能做的就是将其丢弃。 这似乎或多或少很明显:在 32 位机器上,double*
甚至不会具有与double
相同的大小。
但是您的示例不会将double*
转换为double**
。 它创建一个新的double**
,指向double*
。 这很好。
是否允许将 (double ( 转换为 (double *(,例如 double *d1; double **d2 = &d2 并使用 d2[0][y] 等语法期望与 d1[y] 相同?
当然不是,它甚至不会编译。
但如果你的意思是:
double *d1;
double **d2 = &d2;
那么是的,以上是完全有效的,既然d2[0][y]
可以看作是(*d2)[y]
,所以真的完全没有问题。
最后,请记住,在上面的代码中,您没有强制转换任何内容:&d2
已经是 double**
类型。如果你必须投射某些东西,请使用C++样式的强制转换(static_cast
、dynamic_cast
、reinterpret_cast
等(,而不是C样式的转换。
相关文章:
- 函数样式投射指针
- 指针投射:指针有价值吗?
- 代码厨师问题伊什瓦拉(应许之地)
- 动态投射子类
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- 如何投射类型擦除的 std::function?
- 如何模仿派生到基本指针自动投射?
- 着色器将uint8投射到float,并将其重新解释回uint
- ZeroMQ :如何将 Poller 中使用的pollitem_t项投射回 ZeroMQ 套接字?
- 为什么第一个Dynamic_cast没有投射到基类?
- 访问冲突投射到无效*并返回
- 为什么unique_ptr<Derived>隐式投射到unique_ptr<Base>?
- 在UE4中,玩家进行光线投射、击中物体并触发自定义事件C++
- 连续光线投射之间的时间延迟
- 投射空指针以检查内存对齐情况
- 布尔值与虚空*在同一对象上投射
- 无法投射为无效 *
- 智能指针的投射
- C++如何创建自动投射贴图?