我一直在读Exceptional C++ by Herb Sutter.到达时Item 32
我找到了以下内容
namespace A
{
struct X;
struct Y;
void f( int );
void g( X );
}
namespace B
{
void f( int i )
{
f( i ); // which f()?
}
}
Run Code Online (Sandbox Code Playgroud)
这个f()调用自身,具有无限递归.原因是唯一可见的f()是B :: f()本身.
还有另一个带有签名f(int)的函数,即命名空间A中的函数.如果B写了"使用命名空间A"; 或者"使用A :: f;",当查找f(int)时,A :: f(int)将作为候选者可见,并且f(i)调用在A :: f之间是不明确的( int)和B :: f(int).由于B没有将A :: f(int)带入范围,因此只能考虑B :: f(int),因此调用明确地解析为B :: f(int).
但是当我做了以下......
namespace A
{
struct X;
struct Y;
void f( int );
void g( X ); …Run Code Online (Sandbox Code Playgroud) c++ ×1