gpt4 book ai didi

c++ - 模板函数的实例化点在调用点之后,编译器如何查找和链接它?

转载 作者:行者123 更新时间:2023-11-28 04:07:23 28 4
gpt4 key购买 nike

#include <iostream>

void test(){}
void test1();

int main()
{
test();
test1();
return 0;
}

void test1(){}

上面的代码告诉我们,在调用某个函数时,必须在调用点之前查找函数的定义声明。在第二部分

#include <iostream>

template<typename T>
void show(T){}

int main()
{
show(0); //#1
return 0;
}
//#2
//#3

我们在 #1 处知道,模板函数 show 需要隐式实例化,实例化点在 main 函数之后,在“#2”或翻译单元“#3”的末尾.我很困惑……如果“show ”的定义在点 #1 之后,那么为什么编译器可以查找 #1 的定义然后链接它?

最佳答案

也许术语定义声明让事情变得更难理解。但主要思想是让编译器知道存在名为 test()test1() 和/或 show() 的函数。这些函数可能在#2 或#3 中的#1 之后定义,但对于模板,声明通常后跟定义。

关于c++ - 模板函数的实例化点在调用点之后,编译器如何查找和链接它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479418/

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