c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数:
void Foo()
{
static int a=; // initialize
std::cout << a;
a++;
}
里的static int a=3只执行了一次。在main中调用Foo()两次,结果为34.将上面的函数改为
void Foo()
{
static int a;
a=; // not initialize
std::cout << a;
a++;
}
同样在Foo()中调用两次.结果为33
在类中使用非const的static类成员变量。初始化时要使用typename classname::variablename = value的形式
例如:
class myClass
{
public:
static int a;
myClass()
{
}
};
int myClass::a = ; // here initialize
int main()
{
cout << myClass::a;
return ;
}
如果使用的是const类型的static变量,那么就要在类中初始化:
class myClass
{
public:
const static int a=; // here initialize
myClass()
{
}
};
如果是模板中使用非const的static的变量..那需要根据具体类型初始化。
例如 int myClass<int>::a = 4;那么如果你调用的是cout << myClass<double>::a,那一定会编译出错的。
因为模板是不是具体类型,myClass<int>, myClass<double>才是一个具体类型,而一个类静态成员在特定类中被初始化一次。这样就好理解了。
原题目: c++ 类中static变量初始化问题
作者:cctt_1
原地址:http://blog.csdn.net/cctt_1/article/details/3979610
c++ 类与函数中static变量初始化问题(转)的更多相关文章
- 浅谈Java类中的变量初始化顺序
一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行 ...
- 调整static变量初始化顺序的一个办法
// wrap the LaunchDir variable in a function to work around static/global initialization order stati ...
- java中static变量和方法的总结
转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...
- 函数中声明变量不用Var的情况
我们都知道函数中声明变量不用Var时这个变量会成为全局变量,但是并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句. 看一段代码 function f(){ alert(a); ...
- django变量使用-在模板中使用视图函数中的变量
DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...
- 第5.4节 Python函数中的变量及作用域
一.函数中的变量使用规则 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内: 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一 ...
- java中static变量的声明和初始化
目录(?)[+] 问题1静态变量如何初始化 问题2JDK如何处理static块 问题3如何看待静态变量的声明 对初始问题的解答 在网上看到了下面的一段代码: public class Test ...
- non-local static 变量初始化顺序不确定,带来的问题
所谓static对象,其寿命从被构造出来直到程序结束为止,因此stack和heap-based对象都被排除.这种对象包括global对象.定义于namespace作用域内的对象,classes内.在函 ...
随机推荐
- ASP.NET MVC开发微信(一)
public string index() { return Content(""); }
- MFC学习 标签页与属性页及各常用控件使用
参考 http://blog.csdn.net/anye3000/article/details/6700023 CTabCtrl: BOOL CTabTestDlg::OnInitDialog() ...
- HTTP权威指南----缓存
缓存的处理步骤: 1.接收----缓存从网络中读取抵达的请求报文2.解析----缓存对报文进行解析,提取出URL和各种首部3.查询----缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保 ...
- Effective Modern C++翻译(1):序言
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ...
- 关于AIR新浪登录测试
/** *由于在应用申请中,我设置的域名属于新浪云,因此在本地测试的话肯定不能成功的,有个办法就是直接在新浪云那边授权成功后,将token的值直接使用post或者get方法传递过来,直接在本地 *lo ...
- Datable 排序
if(dt.Columns.IndexOf("name") != -1) //存在这个字段 { dt.DefaultView.Sort = "name asc" ...
- WPF学习系列之八(形状,画刷和变换)
形状,画刷和变换 概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它 ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- css3多列example
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- thinkphp验证码点击更换js实现
<img src="__CONTROLLER__/verify" alt="" onclick=this.src="__CONTROLLER__ ...