什么时候我应该使用自己的命名空间?

时间:2015-10-27 05:42:46

标签: c++ c++11 namespaces

首先,我无法理解C ++标准库或std的结构。例如,“Hello,world!” programm看起来像这样:

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
}

用于生成随机数和执行时间评估的更复杂的程序如下所示:

#include <iostream>
#include <random>
#include <chrono>
#include <time.h>

int main() {
    std::chrono::time_point<std::chrono::system_clock> start, end;
    std::tr1::default_random_engine eng(static_cast<unsigned int>(time(NULL)));
    std::tr1::uniform_int<int> unif(0, 99);

    start = std::chrono::system_clock::now();

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            std::cout << unif(eng) << " ";
        }

        std::cout << std::endl;
    }

    end = std::chrono::system_clock::now();

    int elapsed_milliseconds = std::chrono::duration_cast<std::chrono::milliseconds> (end - start).count();

    std::cout << "Elapsed time: " << elapsed_milliseconds << "ms" << std::endl;

    std::cin.get();
    return 0;
}

根据我的意见代码:

std::tr1::uniform_int<int> unif(0, 99);

或者这个:

std::chrono::time_point<std::chrono::system_clock> start, end;

看起来非常难看。当然我可以使用这样的东西:

using namespace std;
using namespace std::tr1;
using namespace std::chrono;

但是这段代码可能会导致一些问题:Why is "using namespace std" considered bad practice?

我无法理解在standrad库中创建嵌套命名空间的原因。这只是与名称功能冲突的一个原因吗?或其他什么?

对于我自己的项目,我应该使用自己的命名空间?

1 个答案:

答案 0 :(得分:1)

命名空间是一个逻辑组。使用命名空间没有任何规则。您可以使用或不使用命名空间。但这都是关于组织代码,库或API的。阅读本文,了解&#34; Herb Sutter&#34; http://www.gotw.ca/publications/mill08.htm

此外,您可以将using namespace std;用于打开命名空间。没有任何规则说不能。但所有这些都是为了向下一个程序员编写良好实践,以使理解变得简单并保持易于维护。

您可以为您的程序使用一个或多个命名空间,特别是如果您要创建将在公共场所分发的API或库。

同样有助于在大型程序中保持模块分离。并允许程序员无依赖地工作。

认为Google有两个用于网络和移动设备的UI团队。他们可以为其代码模块使用单独的命名空间

Google:Web:UIGoogle:Mobile:UI

即使他们可以进一步扩展为

Google:Web:UI:controlsGoogle:Mobile:UI:controls

或者他们可以使用

Google:controls:Web:UIGoogle:controls:Mobile:UI

这就是他们的愿望,安慰以及他们如何思考良好的组织方式。但是可以有更好的方法。

与STDLIB相同的故事。开发人员创建命名空间结构来组织模块。但它可能不是完美的方式。但你必须使用它。 如果您不喜欢,可以将其别名http://en.cppreference.com/w/cpp/language/namespace_alias

如果您要创建程序。阅读其他人如何使用。特别受欢迎的C ++项目,如Linux boost等。下载代码并查看。如果您的程序非常简单,那么您可能不需要太在意。但总是阅读并保持良好的实践(阅读本书以获取更多信息)。 http://www.gotw.ca/publications/c++cs.htm