gpt4 book ai didi

c++ - 递归结构列表有什么明显的缺点吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:31 24 4
gpt4 key购买 nike

我的问题是像下面这样的结构,它对内存有影响吗?我应该避免这种结构吗?它感觉合法,但似乎偏离了“正常”的 C++ 模式。

template<typename a, typename b>
struct Cons {};

...

template<typename a, typename b>
struct head<Cons<a, b>> { using type = a; };

...

template<typename a, typename b>
struct tail<Cons<a, b>> { using type = b; };

...

template<typename list>
struct recursive_list
{
using head = typename head<list>::type;
using tail = typename tail<list>::type;

head curr;
recursive_list<tail> next;
};

...

recursive_list<Cons<int,Cons<std::string,Nil>>> rl;
rl.curr=1;
rl.next.curr="2";

最佳答案

按照您编写的方式,应该不会引起任何问题。也就是说,所消耗的内存将与声明一个包含 Cons 对中的所有字段的结构相同。需要考虑对齐问题,这可能会根据编译器的好坏而加剧。我在这里考虑结构更大,因为字段不能更紧密地打包,因为它们属于不同的类型。但这应该不是问题,除非您明确要求这种包装。

要考虑的一件事是vtables。如果您想添加虚函数,您可能需要为每个 Cons(基本上意味着每个字段)支付一个 vtable 条目的成本。

关于c++ - 递归结构列表有什么明显的缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com