1

我刚刚开始在 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; 不起作用,因为我得到未解决的符号错误。)

谁能解释发生了什么?这是一个错误还是我错过了与模块工作方式有关的东西?

4

0 回答 0