C++命名空间名称隐藏
C++ namespace name 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,这意味着我必须手动检查所有被我的重载隐藏的函数并添加 ::
处理这个问题的正确方法是什么?
我试过了,效果很好:
namespace abc {
void sqrt(SomeType x) {}
using std::sqrt;
float x = 1;
float y1 = sqrt(x);
float y2 = sqrt(x);
}
通常 using namespace std
被认为是不好的做法:Why is "using namespace std" considered bad practice?
最好尽可能明确,因此通过指定 std::sqrt()
绝对不会混淆您实际调用的函数。例如
namespace abc
{
void sqrt(SomeType x) {}
float x = 1;
float y1 = sqrt(x);
float y2 = std::sqrt(x);
}
假设这段代码:
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,这意味着我必须手动检查所有被我的重载隐藏的函数并添加 ::
处理这个问题的正确方法是什么?
我试过了,效果很好:
namespace abc {
void sqrt(SomeType x) {}
using std::sqrt;
float x = 1;
float y1 = sqrt(x);
float y2 = sqrt(x);
}
通常 using namespace std
被认为是不好的做法:Why is "using namespace std" considered bad practice?
最好尽可能明确,因此通过指定 std::sqrt()
绝对不会混淆您实际调用的函数。例如
namespace abc
{
void sqrt(SomeType x) {}
float x = 1;
float y1 = sqrt(x);
float y2 = std::sqrt(x);
}