出于某些奇怪的原因,我想在函数作用域内声明一个函数。 因此,我得到了以下代码:
namespace NS
{
void foo()
{
void bar();
bar();
}
}
在另一个编译单元中,我想定义bar。 根据我使用的编译器,我需要将bar放在命名空间NS或全局命名空间中才能连接:
在clang上:
namespace NS
{
void bar() {}
}
在MSVC中:
void bar() {}
如果有的话,什么是好的行为?
另外一个问题是,为什么以下代码在我的两个编译器上都无法编译:
namespace NS
{
void foo()
{
void bar();
::bar(); // bar declared in global namespace
}
}
或者
namespace NS
{
void foo()
{
void bar();
::NS::bar(); // bar declared in NS namespace
}
}
感谢您的帮助。
GiSylbe