在 C++17 中初始化后可以更改内联变量吗?

Ger*_*ago 11 c++ dll clang visual-c++ c++17

我的场景如下(它在 clang 中有效,但在 gcc 中无效)

liba.hpp:

inline int MY_GLOBAL = 0;
Run Code Online (Sandbox Code Playgroud)

libother.cpp: (dll)

#include "myliba.hpp"

void myFunc() {
    //
    MYGLOBAL = 28;
}
Run Code Online (Sandbox Code Playgroud)

一些exe.cpp:

RunAppThatUsesBothLibAandLibOther();
Run Code Online (Sandbox Code Playgroud)

问题是内联变量在我预期为 28 的地方显示为 0,因为它在运行时已被修改。MSVC 不同意这一点,但 clang 做了我期望的事情。

问题是:在我的场景中可以在运行时修改内联变量吗?(我通过反内联变量解决了这个问题。)

Ant*_*ams 10

是的,inline变量可以在初始化后修改。

但是,DLL 在带有 MSVC 的 Windows 上是奇怪的东西。近似地,每个 DLL 都被建模为它自己的 C++ 程序,具有完全独立的运行时。因此,inline主程序有一个变量副本,DLL有另一个副本。