首先,我无法理解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库中创建嵌套命名空间的原因。这只是与名称功能冲突的一个原因吗?或其他什么?
对于我自己的项目,我应该使用自己的命名空间?
答案 0 :(得分:1)
命名空间是一个逻辑组。使用命名空间没有任何规则。您可以使用或不使用命名空间。但这都是关于组织代码,库或API的。阅读本文,了解&#34; Herb Sutter&#34; http://www.gotw.ca/publications/mill08.htm
此外,您可以将using namespace std;
用于打开命名空间。没有任何规则说不能。但所有这些都是为了向下一个程序员编写良好实践,以使理解变得简单并保持易于维护。
您可以为您的程序使用一个或多个命名空间,特别是如果您要创建将在公共场所分发的API或库。
同样有助于在大型程序中保持模块分离。并允许程序员无依赖地工作。
认为Google有两个用于网络和移动设备的UI团队。他们可以为其代码模块使用单独的命名空间
Google:Web:UI
和Google:Mobile:UI
即使他们可以进一步扩展为
Google:Web:UI:controls
和Google:Mobile:UI:controls
或者他们可以使用
Google:controls:Web:UI
和Google:controls:Mobile:UI
这就是他们的愿望,安慰以及他们如何思考良好的组织方式。但是可以有更好的方法。
与STDLIB相同的故事。开发人员创建命名空间结构来组织模块。但它可能不是完美的方式。但你必须使用它。 如果您不喜欢,可以将其别名http://en.cppreference.com/w/cpp/language/namespace_alias。
如果您要创建程序。阅读其他人如何使用。特别受欢迎的C ++项目,如Linux
boost
等。下载代码并查看。如果您的程序非常简单,那么您可能不需要太在意。但总是阅读并保持良好的实践(阅读本书以获取更多信息)。 http://www.gotw.ca/publications/c++cs.htm