我在代码中看到了这一点,无法理解这里发生了什么:
T * ptr; // we have some pointer and it has proper adress
...
// Later I see this and I can't understand what is going here
ptr = *((T **)ptr);
此外,稍后在代码中我看到*((T**)ptr) = m_address;
使用这种结构的是什么?
*((T**)ptr)
谢谢!
答案 0 :(得分:1)
这意味着作者希望他们改为编写Glide.with(mContext)
.load("someurl")
.placeholder("your_placeHolder")
.fitCenter()
.error("your_errorImg")
.into(imageView);
,并且通过将指针转换为与声明的指针不同的类型来解决他们没有做到的事实。在解除引用之前。它假装T** ptr
指向ptr
而不是T**
。
在某些情况下,这个type punning是可以的(例如,它通常与T*
类型一起使用以实现多态性),但输入punning struct sockaddr
to T*
非常奇怪。
事实上,除非T**
是T
,或者char
有T
作为其第一个成员,并且没有填充,否则它是还有代码气味(据我所知,UB)。
避免的。