yur*_*hek 10 c++ overloading member-functions name-lookup name-hiding
最近我注意到,当在类中时,成员函数完全使用相同名称的阴影函数.完全我的意思是,每个具有相同名称的自由函数根本不考虑重载解析.我能理解为什么用这样的事情来完成它:
void f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
Run Code Online (Sandbox Code Playgroud)
在函数具有相同签名的情况下,其唯一自然的变量作用域以相同的方式工作.但是为什么要禁止自由函数具有不同签名的无意义调用:
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
Run Code Online (Sandbox Code Playgroud)
我不是问如何从类中调用一个带阴影的自由函数.我想知道的是这种设计背后的基本原理.
对于非限定名称查找,一次只考虑一个范围,如果该范围内的搜索未产生任何结果,则搜索下一个更高范围.在您的情况下,只S搜索范围.
但是为什么要禁止自由函数具有不同签名的无意义调用:
问题是名称查找不涉及除名称,标识符之外的任何内容.你完全忘记了你想要调用一个函数,它只是看到一个标识符.如果你只是使用相同的名字查找auto x = f;,如果你这样想,有很好的理由你只想要一个非常有限的搜索范围.任何其他东西都会让用户感到惊讶.
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |