名称查找、命名空间与接口原则
1. 名称查找与接口原则 - 第一部分
当调用一个函数时,具体调用的是哪个函数呢?答案由名称查找决定,不过其中的一些细节可能会让人感到意外。
以下面的代码为例:
namespace A
{
struct X;
struct Y;
void f( int );
void g( X );
}
namespace B
{
void f( int i )
{
f( i ); // 调用哪个 f()?
}
void g( A::X x )
{
g( x ); // 调用哪个 g()?
}
void h( A::Y y )
{
h( y ); // 调用哪个 h()?
}
}
下面对这三个调用进行分析:
- B::f(int i) 中的 f(i) :这个 f() 会无限递归调用自身。原因是在当前作用域中,唯一可见的 f() 就是 B::f() 本身。虽然命名空间 A 中也有一个签名为 f(int) 的函数,但由于 B 中没有使用 using namespace A; 或 using A::f; 将 A::f(int)
超级会员免费看
订阅专栏 解锁全文
3209

被折叠的 条评论
为什么被折叠?



