我在这里有一小段代码供您考虑,这让我很困惑。奇怪的是它可以在 Sun Studio 和 GCC 上编译,尽管我认为它不应该。
考虑一下:
namespace name
{
class C
{
int a;
};
void f(C c);
void g(int a);
}
int main(int argc, char** argv)
{
name::C c;
name::f(c);
f(c); // <--- this compiles, strangely enough
name::g(42);
// g(42); <--- this does not, as I expected
}
来自同一命名空间的类参数会导致函数f
“泄漏”出命名空间,并且可以在没有name::
.
有人对此有解释吗?肯定是我,而不是编译器在这里出错。