簡體   English   中英

在 C++17 中初始化后可以更改內聯變量嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM