gpt4 book ai didi

c++ - C++ 编译器是否为每个具有相同模板参数集的模板类实例生成代码?

转载 作者:行者123 更新时间:2023-11-30 01:39:29 29 4
gpt4 key购买 nike

以免考虑众所周知的编译时递归斐波那契计算。在这种特殊情况下有多少次fibonacci<1> (或 fibonacci<20> 无关紧要)被实例化了吗?恰好只有一次吗?如果是,编译器会为我们做动态规划算法:)

    template<int n>
struct fibonacci
{
static const uint64_t value = fibonacci<n - 1>::value + fibonacci<n - 2>::value;
};

template<>
struct fibonacci<0>
{
static const uint64_t value = 0;
};

template<>
struct fibonacci<1>
{
static const uint64_t value = 1;
};

int main()
{
std::cout << fibonacci<80>::value;
}

让我们考虑另一个例子。

    int main()
{
std::vector<int> v1;
std::vector<int> v2;
}

C++ 编译器是否为 vector<int> 的两个实例生成单独的代码代码? ?如果 vector<int> 的类似实例怎么办?在不同的翻译单元?

最佳答案

C++ 标准不强制要求其中之一。只要完成的程序按照指定的方式运行,编译器就可以做任何事情,请参阅所谓的“as-if”规则(§1.9-1)。一个好的编译器不会生成不必要的代码,所以我希望它能将斐波那契示例优化为常量,将 vector 示例优化为 vector 函数的一种实现。

关于c++ - C++ 编译器是否为每个具有相同模板参数集的模板类实例生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45634861/

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