gpt4 book ai didi

c++ - C++ 中的模板参数存储在哪里?

转载 作者:行者123 更新时间:2023-12-04 09:19:16 26 4
gpt4 key购买 nike

假设我们有一个 A 类:

template<int N>
class A final{
public:
void foo() const { cout << N << endl; }
};

模板参数 N 存储在哪里?在堆中还是在堆栈中的对象内存中?

最佳答案

N本身不存储在任何地方,它被编码到类型中。从这个角度来看,模板特化A<1>与非模板类相同 A1 .对于 A<2020>{}.foo()您可能会得到与 std::cout << 2020 相同的程序集.当然,常数2020必须存储在某个地方,但它不会是 A<2020>{} 的一部分目的。

编译后,根据目标架构,A<2020>{}.foo()可能看起来像这样 (x86-64):

mov     esi, 2020
mov edi, OFFSET FLAT:_ZSt4cout
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)

这里 N直接放入寄存器。

或(ARM):

ldr     r1, .L4
ldr r0, .L4+4
bl std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
...
.L4:
.word 2020
.word _ZSt4cout

这里 N从某个内存位置加载。

Assembly demo

关于c++ - C++ 中的模板参数存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678534/

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