[英]Can initialization order of global variables across TUs be forced with C++17 inline members?
[英]Can an inline variable be changed after initialization in 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 做了我期望的事情。
問題是:在我的場景中可以在運行時修改內聯變量嗎? (我通過反內聯變量解決了這個問題。)
是的,初始化后可以修改inline
變量。
但是,DLL 在帶有 MSVC 的 Windows 上是奇怪的東西。 近似地,每個 DLL 都被建模為它自己的 C++ 程序,具有完全獨立的運行時。 因此,主程序有一個inline
變量的副本,DLL 有另一個副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.