在C++中,如果在header.hpp中定义此函数
void incAndShow()
{
static int myStaticVar = 0;
std::cout << ++myStaticVar << " " << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并且在至少两个.cpp文件中包含header.hpp.然后你会有multiple definition of incAndShow().这是预期的.但是,如果您向该函数添加模板
template <class T>
void incAndShow()
{
static int myStaticVar = 0;
std::cout << ++myStaticVar << " " << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
那你就不会有任何multiple definition of错误.同样,两个不同的.cpp调用具有相同模板(例如incAndShow<int>())的函数将共享myStaticVar.这是正常的吗?我问这个问题,因为我确实依赖于这个"功能"(共享静态变量),我想确保不仅是我的实现正在这样做.