gpt4 book ai didi

c++ - 为什么类成员函数会影响同名的自由函数?

转载 作者:太空宇宙 更新时间:2023-11-04 13:22:23 25 4
gpt4 key购买 nike

It recently came to my attention该成员函数完全影子在类内部时具有相同名称的自由函数。我所说的完全是指每个具有相同名称的自由函数根本不被考虑用于重载决议。我可以理解为什么要这样做:

void f();

struct S
{
void f();

void g()
{
f(); // calls S::f instead of ::f
}
};

如果函数具有相同的签名,那么变量作用域以相同的方式工作是很自然的。但是,为什么要禁止自由函数具有不同签名的明确调用,如下所示:

void f();

struct S
{
void f(int x);

void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};

我不是在问如何从类内部调用一个隐藏 自由函数。我想知道的是这种设计背后的基本原理。

最佳答案

对于非限定名称查找,一次只考虑一个范围,如果该范围内的搜索未产生任何结果,则搜索下一个更高的范围。在您的情况下,仅搜索 S 的范围。

But why prohibit unambigious calls where free function has different signature like this:

问题是名称查找 除了名称、标识符 之外不关心任何其他内容。它完全没有注意到你想调用一个函数,它只看到一个标识符。如果您只是使用 auto x = f;,就会发生相同的名称查找,如果您这样想,那么您只需要非常有限的搜索范围是有充分理由的。其他任何事情都会让用户感到惊讶。

关于c++ - 为什么类成员函数会影响同名的自由函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706523/

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