C元组与结构

新手上路,请多包涵

使用 std::tuple 和仅数据 struct 之间有什么区别吗?

 typedef std::tuple<int, double, bool> foo_t;

struct bar_t {
    int id;
    double value;
    bool dirty;
}

从网上查到的,我发现有两个主要区别: struct 可读性更强,而 tuple 有很多通用函数可以使用。是否应该有任何显着的性能差异?此外,数据布局是否相互兼容(可互换)?

原文由 Alex Koay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
1 个回答

从其他答案来看,性能考虑充其量是最小的。

所以它真的应该归结为实用性、可读性和可维护性。 struct 通常更好,因为它创建的类型更易于阅读和理解。

有时,可能需要 std::tuple (甚至 std::pair )以高度通用的方式处理代码。例如,如果没有 std::tuple 类的东西,一些与可变参数包相关的操作将是不可能的。 std::tie 是一个很好的例子,说明 std::tuple 可以改进代码(在 C++20 之前)。

但是在任何你 可以 使用 struct 的地方,你可能 应该 使用 struct 。它将赋予您类型的元素语义含义。这对于理解和使用类型非常宝贵。反过来,这可以帮助避免愚蠢的错误:

 // hard to get wrong; easy to understand
cat.arms = 0;
cat.legs = 4;

// easy to get wrong; hard to understand
std::get<0>(cat) = 0;
std::get<1>(cat) = 4;

原文由 John McFarlane 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏