相关疑难解决方法(0)

特殊的C++ [Bug]?

我一直在读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++

12
推荐指数
1
解决办法
450
查看次数

标签 统计

c++ ×1