gpt4 book ai didi

c++ - 不使用模板参数的函数导致过多的代码膨胀?

转载 作者:太空宇宙 更新时间:2023-11-04 15:38:33 24 4
gpt4 key购买 nike

我有一个函数 f,它接受一个 Bar 类型的参数,它有 3 个模板参数。 f 不使用这三个参数中的任何一个。问题:编译器是否仍会根据所有使用的 A、B 和 C 组合生成 f 的多个版本,或者是否有更好的方法?

例子:

template<typename A, typename B, typename C>
class Bar;

template<typename A, typename B, typename C>
void f(Bar<A,B,C>& bar)
{
//code that does not use A, B or C, e.g.:
std::cout << bar.some_getter() << std::endl;
}

最佳答案

编译器是否会实际生成不同的代码(或首先生成任何单独的代码)将取决于您对这些函数执行的操作。例如,如果您只是调用该函数并且它相当小,编译器可能会完全内联代码,使其可能比它首先创建一个函数时更小。

另一方面,如果您获取不同实例化的地址,它们将具有不同的地址,即,即使编译器可能共享大部分相同的代码,如果类型相同,它也需要具有不同的地址.我不确定您是否可以比较不同类型的函数指针(随着参数 Bar<A, B, C> 的变化,我们的函数将具有不同的类型)。

请注意,即使 f()不得接触任何类型 A , B , 或 C直接地,事实 Bar实例化之间的差异可能导致完全需要并生成不同的代码。

关于c++ - 不使用模板参数的函数导致过多的代码膨胀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663513/

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