模板类中使用static变量

shawl84 2019-01-07 11:58:28
变量随着模板的特化,是否还能保持函数内就1个? 还是每个特化函数中1个?
...全文
607 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2019-01-25
  • 打赏
  • 举报
回复
类中静态变量是跟类绑定的。 类模板也只是个模板,并不是类,模板实例化有具体类后才会有对应的静态变量,否则只是个模板而已。
cwenhe0324 2019-01-24
  • 打赏
  • 举报
回复
肯定是每个特化都保持一个的,不然以下A<int>::a, 和A<double>::a还能一样不成 template < class T> class A { public: static T a; };
zhouqunhai 2019-01-15
  • 打赏
  • 举报
回复
好像是只能初始化一次
一倾而尽 2019-01-14
  • 打赏
  • 举报
回复
static变量声明在模板中,其作用域只在同一实例对象中相同,不同的实例对象static变量的值也不同。
独孤过 2019-01-07
  • 打赏
  • 举报
回复
每特化一模板就产生一份新代码,所以每个特化代码都有单独的静态变量。
羽飞 2019-01-07
  • 打赏
  • 举报
回复 1
写个代码试一下就好了
template < class T>
class A
{
public:
static int a;
void print() const
{
printf("a: %p\n", &a);
}
};
template <class T>
int A<T>::a;

int main(int argc, char *argv[])
{
A<int> aint;
A<long> along;
aint.print();
along.print();
return 0;
}


我这个代码测试出来是不同的:
a: 0x601060
a: 0x601064

原理也很简单,不同的类变量自然不一样。

NOTE:我是在gcc 5.2上编译的,用的-std=c++0x编译选项。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧