类模板中的非模板成员函数在可执行文件中只生成一次吗?

问题描述 投票:0回答:1

示例:

template<typename T>
class A {
    void f() { std::cout << "f";}
};

...

A<int> a;
A<double> a;

编译和链接后,

f
在最终二进制文件中生成一次还是多次(每个模板实例化一次)?我似乎在标准中找不到这条规则。 AI说它只生成一次,但我对它不够信任。

c++ class templates
1个回答
0
投票

f是生成一次还是多次

成员函数的 声明 使用

A<int>
A<double>
的隐式实例化进行实例化。但定义仅在实际使用成员函数时实例化。


这意味着由于

A<int>
A<double>
不同的类类型,因此将实例化两个不同的成员函数声明。您的程序中不会实例化任何定义,因为您实际上并未使用成员函数。

© www.soinside.com 2019 - 2024. All rights reserved.