【发布时间】:2010-11-02 22:06:48
【问题描述】:
在 C++ 中,如果在 header.hpp 中定义此函数
void incAndShow()
{
static int myStaticVar = 0;
std::cout << ++myStaticVar << " " << std::endl;
}
并且您在至少两个 .cpp 文件中包含 header.hpp。然后您将拥有multiple definition of incAndShow()。这是预期的。但是,如果您将模板添加到函数中
template <class T>
void incAndShow()
{
static int myStaticVar = 0;
std::cout << ++myStaticVar << " " << std::endl;
}
那么您将不会有任何multiple definition of 错误。同样,两个不同的 .cpp 调用具有相同模板(例如 incAndShow<int>())的函数,将共享 myStaticVar。这是正常的吗?我在问这个问题,因为我确实依赖于这个“特性”(共享静态变量),并且我想确保这样做的不仅仅是我的实现。
【问题讨论】:
-
+1 好问题。现在我正在实现一些“依赖此功能”。