根据我听到的信息,如果你有一个如下变量:
inline int a_var;
或者
struct Foo
{
static inline int a_var;
};
在头文件中并将该头包含在静态库 library2 中的某个位置,然后将其包含在库 Library2 中,然后每个库都会有该变量的副本。
所以我测试了一下。我制作了一个可执行文件并链接到静态库 1 和静态库 2。
我在一个公共头中的结构中声明一个变量:
struct MyStruct
{
static inline int static_var = 0;
};
在我的可执行文件/main()中我执行:
void library_one_function();
void library_two_function();
#include "common_header.h"
#include <iostream>
int main()
{
MyStruct::static_var = 1;
std::cout << "Value from executable = " << MyStruct::static_var << "\n"; // I GET 1
library_one_func(); // LIBRARY ONE FUNCTION CHANGES IT TO 7
std::cout << "Value from executable = " << MyStruct::static_var << "\n"; // I GET 7
library_two_function(); // LIBRARY TWO FUNCTION CHANGES IT TO 100
std::cout << "Value from executable = " << MyStruct::static_var << "\n"; // I GET 100
}
每次我引用该变量时,都没有迹象表明每个库都有自己的副本。总是一样。那么为什么人们说内联变量有自己的副本呢?