C++在a.cpp中调用函数aa初始化local static对象,之后在b.cpp中调用函数aa初始化local static对象,那么这两个对象的地址相同吗,举个例子
时间: 2023-06-25 20:01:58 浏览: 54
在C++中,local static对象是在其所属函数第一次被调用时初始化的,并且其生命周期为整个程序的运行期间。
如果在a.cpp和b.cpp中都调用了函数aa并初始化了相同的local static对象,那么这两个对象的地址是相同的。这是因为local static对象的内存分配只会在程序的静态存储区域中进行一次,并且它们的地址在编译时就已经确定了。
以下是一个例子,展示了在a.cpp和b.cpp中都调用函数aa并初始化相同的local static对象的情况:
a.cpp:
```cpp
#include <iostream>
void aa()
{
static int i = 0;
std::cout << "a.cpp: " << &i << std::endl;
}
int main()
{
aa();
return 0;
}
```
b.cpp:
```cpp
#include <iostream>
void aa()
{
static int i = 0;
std::cout << "b.cpp: " << &i << std::endl;
}
int main()
{
aa();
return 0;
}
```
编译并运行以上两个文件,可以看到它们输出的static对象的地址是相同的。