
C++
我举个简单例子来说明这个问题。假设我们有一座大楼,每一个DLL就如同一个单独的房间。在单个可执行文件里,
C++17的inline static成员变量就像大楼共用的
中央空调控制器,所有房间共用一个。但在Windows的DLL环境中,情况有所不同。要是不添加导出导入符号,每个DLL都会有这个static变量的一个副本,这就好比每个房间都安装了自己的
空调控制器,这与我们想要唯一定义的目的背道而驰。看一个具体例子:如果添加了导出导入符号,所有DLL就会共享同一个实例,就像所有房间最终都使用同一个
中央空调控制器。不过要注意,这个时候不能使用inline了,因为导出的静态成员需要在源文件里定义。如果要在多个DLL之间共享静态成员变量,最好使用导出导入符号,而不要依赖inline,这样才能保证真正的唯一定义。