gpt4 book ai didi

c++ - C++ 中的参数相关查找

转载 作者:可可西里 更新时间:2023-11-01 18:20:43 26 4
gpt4 key购买 nike

这是如何运作的?与ADL有关吗?

#include <iostream>

template <typename T>
struct A
{
friend void f(T x)
{
std::cout << "A\n";
}
};

int main()
{
f(new A<void*>());
}

谁能告诉我为什么我不能使用类似的东西

f(A<int>());

最佳答案

f(new A<void*>());    

确实有效,因为 Argument dependent lookup/Koenig lookup (ADL)
Koenig Lookup 指出:

You don’t have to qualify the namespace(scope) for functions if one or more argument types are defined in the namespace of the function.

考虑一个 simplistic example不使用模板,它应该可以帮助您更好地理解 ADL 的工作原理:

#include <iostream>
struct A
{
friend void f(A x)
{
std::cout << "A\n";
}
};

int main()
{
f(A());
return 0;
}

输出:

A

当您使用 f(A<int>()) 时, 它要求 f()需要 int 类型的参数, 但您的结构不提供从 A 的任何转换至 int因此错误。

If you provide the appropriate conversion then it will work as well. Something like :

operator int(){return 1;}

关于c++ - C++ 中的参数相关查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274490/

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