C ++名称空间名称隐藏

时间:2015-02-13 09:33:12

标签: c++ namespaces method-hiding

假设这段代码:

using namespace std;
namespace abc {
    void sqrt(SomeType x) {}

    float x = 1;
    float y1 = sqrt(x); // 1) does not compile since std::sqrt() is hidden
    float y2 = ::sqrt(x); // 2) compiles bud it is necessary to add ::
}

有没有办法如何在没有::?的情况下在abc命名空间内调用std :: sqrt? 在我的项目中,我最初没有使用名称空间,因此所有重载的函数都是可见的。如果我引入命名空间abc,则意味着我必须手动检查我的重载隐藏的所有函数并添加::

处理此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

我试过这个并且工作正常:

namespace abc {
    void sqrt(SomeType x) {}
    using std::sqrt;

    float x = 1;
    float y1 = sqrt(x);
    float y2 = sqrt(x);
}

答案 1 :(得分:2)

通常using namespace std被视为不良做法:Why is "using namespace std" considered bad practice?

优良作法是尽可能明确,因此通过指定std::sqrt(),对于您实际调用的函数绝对没有混淆。 e.g。

namespace abc
{
   void sqrt(SomeType x) {}

   float x = 1;
   float y1 = sqrt(x);
   float y2 = std::sqrt(x);
}