我刚刚开始在 Visual Studio 2015 中使用 C++ 中的实验模块,并发现在使用内联初始化时,在模块中导出的类和“普通”类之间的行为存在差异。
module FooMod;
export class Foo
{
int m_num = 34;
public:
int getNum() const
{
return m_num;
}
};
我的消费代码:
#include <iostream>
class Bar
{
int m_num = 56;
public:
int getNum() const
{
return m_num;
}
};
import FooMod;
int main()
{
Foo foo;
std::cout << "foo num = " << foo.getNum() << std::endl;
Bar bar;
std::cout << "bar num = " << bar.getNum() << std::endl;
return 0;
}
输出:
foo num = 12125207 or some other random number.
bar num = 56
如果我为 Foo 即 Foo(){} 提供一个空的构造函数,那么上面的代码按预期工作,我得到 foo num = 34。(顺便说一下 Foo() = default; 不起作用,因为我得到未解决的符号错误。)
谁能解释发生了什么?这是一个错误还是我错过了与模块工作方式有关的东西?