gpt4 book ai didi

C++ 对不同命名空间中函数的模糊调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:32 25 4
gpt4 key购买 nike

这个问题一直让我和一些同事感到困惑,但我们已经验证这是针对大约 5 个不同编译器的错误。他们都返回这个小代码片段是“模棱两可的”。

namespace foo {
struct type_t {
int x;
};
void bar( type_t & );
}

void bar( foo::type_t & );

void func( void ) {
foo::type_t x = { 10 };
bar(x);
}

Clang 返回以下内容:

func.cpp:12:3: error: call to 'bar' is ambiguous
bar(x);
^~~
func.cpp:5:8: note: candidate function
void bar( type_t & );
^
func.cpp:8:6: note: candidate function
void bar( foo::type_t & );
^
1 error generated.

为什么会这样?代码中没有“使用”语句。解析顺序不应该包括 foo 命名空间,那么为什么要在那里搜索呢?为什么这是模棱两可的?

最佳答案

它是argument dependent lookup . bar 的参数位于 foo 命名空间中,因此也会在该命名空间中查找 bar,从而导致歧义。如果您想从全局命名空间调用 foo,请明确调用 ::foo

关于C++ 对不同命名空间中函数的模糊调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235201/

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