给定一个模块
// a-m.cc
export module A;
import B;
import C;
import "D.h";
...
Run Code Online (Sandbox Code Playgroud)
有没有一种调用 gcc 的方法(类似于 -M 对标头所做的操作)来列出对其他模块和导入标头(即 B、C 和“Dh”)的直接依赖项?
这个问题可能太宽泛了,但最近确实让我很高兴:
我最近发现了现代 C++ 中的模块: https://en.cppreference.com/w/cpp/language/modules
但我真的不明白他们的目的以及何时使用它而不是命名空间或只是库头?
在提供的示例中,他们现在使用import <iostream>;代替include <iostream>;,使用其中一种与另一种有什么区别?哪一个是首选?
他们说“模块与名称空间正交”?这是什么意思?
关于开发的指导方针是什么,我们现在应该避免标题和东西吗?
例如:
你好世界.cpp
export module helloworld; // module declaration
import <iostream>; // import declaration
export void hello() // export declaration
{
std::cout << "Hello world!\n";
}
Run Code Online (Sandbox Code Playgroud)
主程序
import helloworld; // import declaration
int main()
{
hello();
}
Run Code Online (Sandbox Code Playgroud)
相对
helloworld.h / helloworld.cpp
include <iostream>;
namespace ns
{
void hello();
}
#include "helloworld.h";
void ns::hello()
{
std::cout << "Hello world!\n";
}
Run Code Online (Sandbox Code Playgroud)
主程序
#include "helloworld.h";
int main()
{ …Run Code Online (Sandbox Code Playgroud)