gpt4 book ai didi

c++ - ADL 与范围解析——更喜欢哪个?

转载 作者:行者123 更新时间:2023-11-28 08:10:28 25 4
gpt4 key购买 nike

我怎么判断我是否应该使用

my_type bar;
using some_namespace::foo;
foo(bar);

代替

some_namespace::foo(bar);

当调用我的函数 foo 时(这不在我的直接范围内)?是否有通用的“规则”来确定您是否应该使用 ADL?我应该“默认”使用哪一个?

最佳答案

那不是 ADL。在您的两个示例中, foo 都是通过正常查找找到的。使用 ADL 的示例如下:

namespace ns {
class A { };
void f(A) { };
}

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

这里,f 不是通过正常查找找到的,而是通过参数相关查找找到的(因为它在命名空间 ns 旁边 A)。无论如何……

尽可能避免 ADL。

ADL 在某些特定场景中很有用,例如运算符重载和可交换概念。但是,应该谨慎使用,因为它会导致 bizarre, unexpected behavior在许多其他情况下。

关于c++ - ADL 与范围解析——更喜欢哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246717/

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