gpt4 book ai didi

c++ - Argument-Dependent Lookup 是否在正常范围查找之前进行?

转载 作者:太空狗 更新时间:2023-10-29 21:12:37 25 4
gpt4 key购买 nike

这是“C++ Primer”第 5 版第 13.3 节中出现的相关代码:

void swap(Foo &lhs, Foo &rhs)
{
using std::swap;
swap(lhs.h, rhs.h); // uses the HasPtr version of swap
// swap other members of type Foo
}

书中提到类特定交换没有被using声明隐藏的现象,并请读者引用§18.2.3:

enter image description here

我阅读了该部分并意识到这可能与参数相关查找 (ADL) 有关。以下为摘录:

enter image description here

但是我在理解上还是有些模糊。我的问题是:ADL 是在正常范围查找之前进行,还是在正常范围查找之后进行?我目前的理解是 ADL 在正常范围查找之前进行,否则它应该是使用的 std::swap 。如果你认为我是对的,我需要确认,或者如果你认为我错了,请指出我犯了什么错误。谢谢。

最佳答案

ADL没去过,不是特别喜欢;除了通过通常的名称查找找到的名称之外,还将考虑通过 ADL 找到的名称。

These function names are looked up in the namespaces of their arguments in addition to the scopes and namespaces considered by the usual unqualified name lookup.

这意味着 ADL 找到的所有命名和通常的名称查找都将在 overload resolution 中考虑;然后将选择最佳匹配。

In order to compile a function call, the compiler must first perform name lookup, which, for functions, may involve argument-dependent lookup, and for function templates may be followed by template argument deduction. If these steps produce more than one candidate function, then overload resolution is performed to select the function that will actually be called.

关于c++ - Argument-Dependent Lookup 是否在正常范围查找之前进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46782156/

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