私が理解していることから、関数の解決は内側のスコープから外側のスコープに発生します。したがって、次の例で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()}
}
したがって、名前空間を明示的に記述することは安全で適切な方法でしょうか?それとも、この状況は余分な冗長性を正当化するのに十分な頻度ではないのでしょうか?