gpt4 book ai didi

c++ - 具有相同参数的命名空间中的函数和函数之间的歧义

转载 作者:行者123 更新时间:2023-12-04 11:17:56 24 4
gpt4 key购买 nike

任何人都可以解释为什么 A::f(const B& b) 之间存在歧义和 f(const A::B& b) .我认为代码对意图非常明确。

#include <iostream>

namespace A
{
class B
{
protected:
double value_;
public:
B() : value_(15.0) {}
double getValue() const {return value_;}
};

void f(const B& b)
{
std::cout << "f(b) = " << b.getValue() << std::endl;
}
}

void f(const A::B& b)
{
std::cout << "Other f(b) = " << b.getValue() << std::endl;
}

int main()
{
A::B b;
A::f(b);
f(b);
return 0;
}
但是,g++ 7.5.0 和 clang 6.0.0 都提示函数调用不明确
( error: call of overloaded ‘f(A::B&)’ is ambiguous ) 无论编译器标志和优化如何。

最佳答案

这是argument-dependent lookup的一个例子.
即使 ::main位于全局命名空间中,A::f无需使用完全限定名称即可调用,因为它是在 namespace A 中查找的其论点,A::B .结果,::f之间存在歧义和 A::f .
要解决歧义,您需要调用 A::f(b) (正如您所做的那样),或 ::f(b) .

关于c++ - 具有相同参数的命名空间中的函数和函数之间的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67397486/

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