c ++ 17引入了内联(静态)变量。据说
“编译器将保证变量只有一个定义 并且它只能在所有编译单元中初始化一次。”
我想知道可视c ++保证内联静态变量在多个模块(dll和exe)中是否唯一。
//cat.h
class __declspec(dllexport) Cat
{
public:
inline static int var = 0;
};
如果cat.h包含在多个dll和一个exe中,那么Cat :: var在应用程序中是否唯一?
答案 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标准不适用于(不能)应用于链接模块。