据我了解,函数解析是从内部范围到外部范围。因此,在下面的示例中,MyNamespace::foo()
将在两种情况下都执行。
foo() {}
namespace MyNamespace
{
void foo() {}
void bar() {foo()}
}
foo() {}
namespace MyNamespace
{
void foo() {}
void bar() {MyNamespace::foo()} // redundant, or safe and expressive?
}
但是,可能会出现您打算调用的场景MyNamespace::foo()
,但是由于您MyNamespace::foo()
实际上并未定义,foo()
因此调用了已定义的全局。
foo() {printf("I don't think you meant to call me...");}
namespace MyNamespace
{
//foo() {}
void bar() {foo()}
}
因此,明确声明命名空间是安全且良好的做法,还是这种情况不够频繁,不足以证明额外的冗长是合理的?