gpt4 book ai didi

c++ - 递归模板生成运行时代码吗?

转载 作者:太空狗 更新时间:2023-10-29 20:26:29 31 4
gpt4 key购买 nike

考虑以下类:

class test {

// recursively template
template<typename T, typename... R>
void add(T t, R... r) {
// do something with t
if(sizeof...(r))
add(r...);
}
// since the variadic template add is recursive, there have to be an end.
void add() {}

public:

template<typename... T>
explicit test(T... rest) {
add(rest...);
}
};

和以下主要内容:

int main() {
test t1(1);
test t2(1, 2);
test t3(1, 2, 3);
}

我缩小了代码,因此可能不需要 add 方法。

我认为这段代码不是生成运行时递归代码,而是创建了 3 个具有 3 个不同数量参数的不同构造函数。我对吗?我只是想确定我是否正确。如果不是那么会发生什么?

编辑:

bames53Casio Neri 的回答正是我所预料的。但是,它不是递归的,但它仍然调用单独的添加,就像您在 bames53 answer 中看到的那样。 .这就像半递归。

最佳答案

模板中的所有代码都是在编译时生成的。这就是模板的全部要点,可变参数模板没有什么不同,通常您会在编译时递归以使可变参数模板终止。基本上就像您将方法编写为嵌套的一样。在扩展模板的编译器阶段之后(不确定这是否是它的工作原理,我不是编译器专家)它基本上看起来好像从来没有模板,它们被扩展并变成模板实例,这本质上与普通代码没有什么不同。我猜想通常编译器还会内联由可变参数模板生成的大部分方法,以生成更高效的代码。

编辑:请记住,当我写这篇文章时,我决定给你一些信任,并假设你的实际代码所做的比你发布的要多(实际上什么都不做)

关于c++ - 递归模板生成运行时代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664659/

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