gpt4 book ai didi

c++ - 为什么使用模板生成的函数的符号类型为 "weak"?

转载 作者:行者123 更新时间:2023-12-01 23:26:14 27 4
gpt4 key购买 nike

创建了一个模板函数C++ template <class T> void myswap(T&d,T&s) 。Main 将其用于 int、double、complex 类型。使用 g++ 编译源代码。通过 nm 转储符号表时,为相应类型生成的函数具有符号类型“W”。

为什么它们生成为弱符号?


#include <iostream>
#include <complex>

template <class T>
void myswap(T& d, T& s)
{
T temp = d;
d=s;
s=temp;
}

int main(void)
{
int m=5,n=6;
std::cout << "m=" << m << " n=" << n <<std::endl;
myswap(m,n);
std::cout << "m=" << m << " n=" << n <<std::endl;

double p=4.3,q=5.6;
std::cout << "p=" << p << " q=" << q <<std::endl;
myswap(p,q);
std::cout << "p=" << p << " q=" << q <<std::endl;

std::complex<double> r(2.3,5.7), s(1.2,3.4);
std::cout << "p=" << r << " q=" << s <<std::endl;
myswap(r,s);
std::cout << "p=" << r << " q=" << s <<std::endl;

return 0;

}

最佳答案

由隐式实例化生成的函数模板特化与内联函数类似,因为如果多个翻译单元生成相同的实例化,则不会违反 ODR。如果不是这样,那么模板几乎无法使用。

弱链接是在典型实现中实现这一点的机制。

关于c++ - 为什么使用模板生成的函数的符号类型为 "weak"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58241873/

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