头文件中“使用命名空间”被认为是不好的做法的原因之一(为什么“使用命名空间 std;”被认为是不好的做法?)是因为它将 using 指令“泄露”给包含头文件的每个人。C++ 模块仍然是这种情况吗?或者我可以“安全地”将 例如using namespace std或using std::cout放入我的模块中吗?:
module;
#include <iostream>
export module Module;
using namespace std;
// using std::cout;
export void greet() {
cout << "Hello World!\n";
}
Run Code Online (Sandbox Code Playgroud)
using任何此类声明的范围都是正在编译的翻译单元。所有模块文件(以某种形式的模块声明开头的文件)都是一个单独的翻译单元。所以它就像export模块中任何其他非 ed 声明一样:对于它来说是本地的。
话虽如此,这只是要避免的原因之一using namespace std;还有很多其他的。它会对名称查找造成严重破坏。包含的名称可能与全局名称和命名空间中使用的名称冲突。等等。
然而,对命名空间using的特定组件使用声明std要合理得多,因为不这样做的主要原因是为了防止泄漏。此外,对于、namespace等子命名空间来说,别名也是一个好主意。std::chronostd::filesystem
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |