C++中的根命名空间编码约定

moa*_*ala 8 c++ coding-style namespaces

你会建议使用全局命名空间作为前缀::吗?(例如::std::cout代替std::cout)为什么?解析C++编译器的速度更快吗?

谢谢.

Kon*_*lph 7

只有这样做才能消除歧义.

我有一段代码,这是必要的,因为我在一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 例如+1,你实际上**有一个理由在另一个命名空间内使用名称std. (5认同)
  • @MatthieuM这是错误的解决方案.命名功能很难实现.函数的名称是*correct*("std"是"标准差"的最普遍的缩写),并且*不应该*只是为了避免名称冲突而改变. (3认同)

tre*_*nki 5

与解析速度无关。C++ 使用依赖于参数的名称查找 - Koenig Lookup,当您必须确保编译器使用全局根命名空间中的符号时,您可以在其前面加上::. 如果不这样做,编译器也可能在认为合适时使用其他命名空间中的函数定义(取决于查找方法)。

因此,除非必要,否则最好不要这样做。


fil*_*mor -1

不要那样做。它会使您的代码变得混乱,并禁用实现您正在使用的函数的自制变体的选项。