【问题标题】:what does it do *((T**)m_ptr)? [duplicate]它有什么作用*((T**)m_ptr)? [复制]
【发布时间】:2018-02-25 11:46:23
【问题描述】:

我在代码中看到了这一点,但无法理解这里发生了什么:

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)

谢谢!

【问题讨论】:

标签: c++ c pointers


【解决方案1】:

这意味着作者希望他们改为写T** ptr,并且在取消引用之前通过将指针转换为与声明它的类型不同的类型来绕过他们没有写的事实。它假装ptr 指向T** 而不是T*

在某些情况下这个type punning 是可以的(例如,它通常与struct sockaddr 类型一起使用以实现多态性),但类型双关语T*T** 很奇怪。

事实上,除非Tchar,或者T 有一个T* 作为它的第一个成员并且没有填充,这也是一种代码味道(据我所知,UB )。

避免。

【讨论】:

  • 恕我直言,"Avoid" 给出了完整的答案。
  • @StoryTeller: "C--------- 不会再输入双关语"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多