C++命名空间和头文件
C++ Namespaces and header files
我见过using namespace std;
的代码。这是否意味着,如果我们使用它,那么我们就不必在代码中包含头文件,或者如果我们不使用名称空间,这是否意味着您必须在每个函数、类之前使用std::
?
您必须包含头文件并使用名称空间。
名称空间包含在头文件中,cin
、cout
等io流包含在namespaces
中。因此,只有包含头文件,才能使用名称空间。如果没有using namespace std
,每次使用这些函数时都必须使用范围解析运算符。
using namespace std;
意味着可以使用std
命名空间中的所有名称,而无需显式指定其命名空间(带有std::
前缀)。也就是说,在using namespace std;
之后,string
和std::string
都是有效的。如果没有using namespace std;
,只有std::string
可以工作。
头文件仍然必须包括在内。
请注意,通常不鼓励使用using namespace
,因为它会用该名称空间中的所有名称填充代码,并且可能会发生冲突。
using namespace std;
这并不是一个理想的做法,我会应用于专业的代码库。原因是它实际上"打开"了std
命名空间(如果你喜欢的话,可以用Java包),你可能正在那里进行"Hello world"式的编程,即不像RT Embedded、Mission Critical或Safety Critical那样严格。例如,我在军种间/行业培训和模拟部门工作,那里的事情通常是安全/任务关键的;如果我如此公开地使用多个名称空间,人们很可能会对我说悄悄话。这实际上与你的程序大小无关,更多的是关于良好实践。是的,如果你在std
命名空间中有很多东西可以使用,那么你可能可以简单地使用它
using std::endl;
using std::string;
using std::cout;
using std::cin;
// And something like that
这"暴露"了这个范围所需的内容,并且仍然允许您使用:
string myStr;
cout << "Some cout" << endl;
就像你在问题中提到的一样。为什么不试试呢?
"好的一点"是,如果你遵循我提到的方法,它还可以"升级"你在C++命名空间和可能的STL中的知识水平。
我知道有些人会说"这仍然是一项艰巨的工作",但对我来说,这是一个很好的妥协,在某种程度上。:)
不要忘记添加必要的标题文件请:-)
- 命名空间中具有.h和.cpp文件的类
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- Qt C++:不同文件中同一命名空间的多个Q_NAMESPACE
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 使用命名空间在另一个".cpp"文件中定义
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 是否将命名空间范围文件本地 (.cpp) 常量放在匿名命名空间中
- 模板实现文件中的匿名命名空间
- C++-使用来自不同头文件、相同命名空间的枚举
- C++ 如何在 def 文件中指定命名空间
- 在实现文件中,我们应该更喜欢"using namespace"指令还是将实现包装在命名空间 { } 中?
- 在头文件中添加命名空间函数
- 在多个 cpp 文件中重用未命名的命名空间函数
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- 跨命名空间的友元类和不同的.H 文件
- 我可以在应用程序之间更改 .proto 文件的命名空间吗?
- 试图将两个类放在同一命名空间中的单独文件中,但只有#1个#Class类作品
- C++中的头文件和命名空间
- 为什么主可执行文件和 dlopen 加载的共享库共享命名空间静态变量的一个副本?
- 包含所有命名空间 std 的文件