gpt4 book ai didi

c++ - 取决于模板参数的函数名称解析

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:58 26 4
gpt4 key购买 nike

在测试中遇到了以下任务:

#include <iostream> using namespace std;

template<typename T> void adl(T) { cout << "T"; }

struct S { };

template<typename T> void call_adl(T t) { adl(S()); adl(t); }

void adl(S) { cout << "S"; }

int main () { call_adl(S()); }

问题是将调用哪些函数。还有一种解释是,不依赖模板参数的函数名称在模板定义时解析,而依赖模板参数的函数名称在已知模板参数时解析。那么,这些“时间”之间有什么区别?

最佳答案

好问题。它将首先调用模板版本,然后调用非模板版本。 [Live example]

原因如解释所说,在这个表达式中:

adl(S());

解析器一遇到名称 adl 就解析它。请注意,此时 adl(S) 函数尚未声明。因此名称必须解析为函数模板。

另一种表达方式:

adl(t);

不同,因为它取决于模板参数 T(这是 t 的类型)。因此,当 T 的参数已知时,名称的解析被推迟到实例化时间。实例化发生在 main 中, adl(S) 声明之后。因此,此调用解析为非模板版本。

关于c++ - 取决于模板参数的函数名称解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483071/

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