首页 > 解决方案 > 在 C++17 中初始化后可以更改内联变量吗?

问题描述

我的情况如下(它在clang中工作,但在gcc中没有)

liba.hpp:

inline int MY_GLOBAL = 0;

libother.cpp: (dll)

#include "myliba.hpp"

void myFunc() {
    //
    MYGLOBAL = 28;
}

一些exe.cpp:

RunAppThatUsesBothLibAandLibOther();

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

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

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

解决方案


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

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


推荐阅读