我正在使用一些静态库构建我的程序(实际上是测试)。
这个库包含一个文件,其中我有这样的功能:
string& GetString() {
static string strFilename;
return strFilename;
}
void PrintToScreen() {
printf("String: %s\n", GetString().c_str())
}
然后在我的 main.cpp (图书馆外)我正在做:
GetString() = "abc";
printf("String: %s\n", GetString().c_str());
PrintToScreen();
我得到这个输出:
String: abc
String:
所以看起来像对函数的第二次调用(但从库内的不同文件完成)以某种方式清除以前的值,重新初始化它,或者使用它自己的副本。
我将 GetString 函数更改为使用“新”,但结果完全相同(顺便说一句,程序永远不会崩溃)。
但我不明白热这可能吗?
任何想法我做错了什么?
- - - - - - - - - - - - - - - - 更新 - - - - - - - - - ------------
- 测试完成是单线程环境。
- 它适用于某些平台,有些则不适用(适用于 windows、MacOS 和 AIX,不适用于 linux、HP_UX、Solaris、FreeBSD...)
- 我在执行期间验证了 strFilename 的地址(GetString 中的 printf),看起来它是一个没有重复的变量(地址始终相同)
- 但是,在最终的库中使用 nm 我会得到类似的结果:
0000000000000030 T _Z16GetLogprintfFilev
0000000000000008 b _ZGVZ16GetLogprintfFilevE16strLogprintfFile
0000000000000018 b _ZZ16GetLogprintfFilevE16strLogprintfFile
U _Z16GetLogprintfFilev
在我的基础库上使用 nm (由最终库使用)我得到:
0000000000000030 T _Z16GetLogprintfFilev
0000000000000008 b _ZGVZ16GetLogprintfFilevE16strLogprintfFile
0000000000000018 b _ZZ16GetLogprintfFilevE16strLogprintfFile