c++ - 在 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 有另一个副本。
推荐阅读
- csv - 用于替换文件夹所有 CSV 中的字符的批处理文件
- spring-mvc - 出现错误:创建类路径资源中定义的名称为“entityManagerFactory”的bean时出错
- java - 从列表中获取文本
在 Groovy 中 - apache-spark - Spark:如何在 spark-submit 中设置 spark.yarn.executor.memoryOverhead 属性
- apache-flink - Flink 如何处理不适合内存的窗口和分区?
- python - 坚持如何抓取包含 JavaScript 表单的网页
- javascript - 如何用纯 JS 改变对象结构
- python - 解码谷歌云存储python api返回的protobuf文件
- javascript - Jasmine - 如何在没有实现的情况下监视函数
- python - 如何在pyspark中打印具有特征名称的随机森林的决策路径?