你会推荐在全局命名空间前加上
谢谢。
::
吗?(例如::std::cout
而不是std::cout
)为什么?这样做对C++编译器的解析速度更快吗?谢谢。
::
吗?(例如::std::cout
而不是std::cout
)为什么?这样做对C++编译器的解析速度更快吗?仅通过这种方式进行消歧。
我有一段代码,由于我在命名空间X
中具有用于标准偏差的函数- std
,因此这是必要的。每当我想要访问std
命名空间时,我需要使用::std
,否则编译器将认为我正在引用该函数。
具体示例:
namespace X {
double std(::std::vector<double> const& values) { … }
void foo(::std::vector<double> const& values) {
::std::cout << std(values) << ::std::endl;
}
}
::
。如果不这样做,编译器可能会在适当时候(取决于查找方法)从其他命名空间中使用函数定义。你不需要这样做,因为编译器会
a) 找到它 b) 如果有任何歧义,如输出错误
namespace foo
{
int test()
{
return 42;
}
}
namespace bar
{
namespace foo
{
int test()
{
return 42;
}
}
}
int main()
{
using namespace bar;
return foo::test(); // error, could be ::foo::test or ::bar::foo::test
}
我看不出有任何好的理由这样做。它会使代码变得难以阅读,只有在你必须明确告诉编译器使用根命名空间时才应该使用它。比如当存在歧义时。
不要这样做。这会使你的代码混乱,并禁用实现自己版本的函数选项。
std::swap
)。命名空间是否由“::”前缀无关紧要。 - Konrad Rudolph