gpt4 book ai didi

c++ - ADL 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 00:44:55 24 4
gpt4 key购买 nike

struct S
{
vector<int> v;
void method()
{
begin(v);
}
};

上面的代码片段编译正常,因为 ADL直到我添加

auto begin() { return begin(v); }

到类声明。那时 C++ 忘记了 ADL 而更喜欢 S::begin甚至没有可行的重载,从而产生错误

error: no matching function for call to ‘S::begin(std::vector<int>&)’ begin(v);

有什么办法可以解决这个问题吗?我在问,因为看完Why use non-member begin and end functions in C++11? , 我开始使用 begin()end()免费功能无处不在以保持一致性,但现在我在定义自己的 begin() 后遇到冲突和 end()方法。

最佳答案

如注释中所述,S::begin 隐藏了 std::begin。您可以通过键入 using std::begin 或显式调用 std::begin 将 std::begin 带入 S 的范围

struct S
{
std::vector<int> v;
void method()
{
using std::begin;
begin(v);
}

auto begin() { using std::begin; return begin(v); }
};

关于c++ - ADL 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45675626/

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