内联静态变量在Visual c ++中的模块之间唯一吗?

时间:2019-08-14 13:10:55

标签: visual-c++ dll c++17

c ++ 17引入了内联(静态)变量。据说

  

“编译器将保证变量只有一个定义   并且它只能在所有编译单元中初始化一次。”

我想知道可视c ++保证内联静态变量在多个模块(dll和exe)中是否唯一。

//cat.h
class __declspec(dllexport) Cat
{
public:
    inline static int var = 0;
};

如果cat.h包含在多个dll和一个exe中,那么Cat :: var在应用程序中是否唯一?

1 个答案:

答案 0 :(得分:1)

您的问题是“开放式的”,但是,如果您实际想要的只是一个实例,则应定义一个宏-例如DLLIMPEXP-在一个宏中有条件地定义为__declspec(dllexport)模块(实际上已定义或至少实例化了该类的模块),而在另两个模块中则为__declspec(dllimport)。然后有您的标头声明:

//cat.h
class DLLIMPEXP Cat
{
public:
    inline static int var = 0;
};

注1:我认为类链接声明将覆盖成员的声明。 注意2:不必是要导出的DLL;它可以是DLL。 EXE也可以导出,而DLL也可以导入! 注意3:正如其他人所说,C ++ 17标准不适用于(不能)应用于链接模块。