【问题标题】:Relationship between struct s { T0 t0; T1 t1; ... } and std::tuple<T0,T1,...> t [closed]struct s { T0 t0; 之间的关系T1 t1; ... } 和 std::tuple<T0,T1,...> t [关闭]
【发布时间】:2012-09-13 21:25:37
【问题描述】:

特别是如果 Tj 是内置类型或指向内置类型的指针,是否有人知道编译器不会布局内存所以offsetof(s, tj) != &amp;get&lt;j&gt;(t) - &amp;get&lt;0&gt;(t)

【问题讨论】:

  • 这样的措辞,我不禁认为你会做一些可怕的事情,比如把一个指向一种类型的指针当作指向另一种类型的指针。请...不要那样做。
  • 通过获得这些知识,您试图实现什么破事?
  • 您是否知道 C++11 标准不要求实现以这种方式实现tuple?我假设您会这样做,因为您要询问哪些“编译器”会这样做。如果您希望它们在所有平台上以某种方式实现,请自行实现或使用boost::tuple。不要依赖于变幻莫测的标准库实现,这些实现可以更改从一个版本到另一个版本。
  • 该标准对tupleiirc 的内部布局没有任何要求。此外,afaik 实现tuple 的最简单方法将以相反的顺序存储元素。这应该可以回答您正在做的事情是否是一个好主意的问题。
  • 为什么这么讨厌?我认为这是一个合理的问题。答案似乎是“没有关系”。

标签: c++ c++11 tuples


【解决方案1】:

该标准不要求实现以任何特定方式布局元组。至少有一种流行的实现以相反的顺序排列成员,另一种以给定的顺序排列成员。 任何布局都是允许的。我实现了tuple that layouts the members minimizing padding,这也是标准库的合法实现。

【讨论】:

  • 感谢费尔南德斯先生。这正是我想要的。我很欣赏您的代码的链接。很遗憾,这些模组是如此琐碎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多