struct Test
{
static int foo()
{
static int i = 0;
return i++;
}
};
上面的一个模板类是一个实际类的简化版本,使用Test的不同具现时,如_T为0,1等,有时i的值不能被初始化,即代码第一次进入foo的时候,i的值没有被初始化为0,而是一个非常大的负数。单独把这个类拿出来测试了下,在vc2005中,没有问题,放在一个项目中用的时候就出现了上述问题,有谁碰到过,可能的原因是什么。
10 个解决方案
#1
静态变量在进主函数之前就要被初始化的
static int i = 0;
这个的生存周期在 foo()这个函数内 如果单独调用上述简单的结构体 时可能初始化静态变量时会成功,
但是在一个项目中 有多个静态变量初始化会按照顺序执行 初始化可能不会在使用前就初始化.
还有一种可能是由于模板类型 是不确定 所以初始化静态变量比较晚 会出现没初始化就使用静态变量
这只是本人的说想到的. 在实际还没有具体遇到
static int i = 0;
这个的生存周期在 foo()这个函数内 如果单独调用上述简单的结构体 时可能初始化静态变量时会成功,
但是在一个项目中 有多个静态变量初始化会按照顺序执行 初始化可能不会在使用前就初始化.
还有一种可能是由于模板类型 是不确定 所以初始化静态变量比较晚 会出现没初始化就使用静态变量
这只是本人的说想到的. 在实际还没有具体遇到
#2
写的挺好的,应该不会遇到静态变量初始化顺序问题。
问题应该出现在其它地方。或者编译器不完全支持标准。vc2005应该不会有这个问题的,它高度符合标准。
#3
static函数不要放在类内实现。老的编译器会有一个不能正确实现"inline函数不inline时去重复"bug。
#4
单独看你这块代码没问题
#5
代码没有问题,
#6
effective C++
#7
最好按照标准的写法来.不要在类里实现
#8
应该先要定义一下吧
#9
不过又好像没问题
#10
多线程?
#1
静态变量在进主函数之前就要被初始化的
static int i = 0;
这个的生存周期在 foo()这个函数内 如果单独调用上述简单的结构体 时可能初始化静态变量时会成功,
但是在一个项目中 有多个静态变量初始化会按照顺序执行 初始化可能不会在使用前就初始化.
还有一种可能是由于模板类型 是不确定 所以初始化静态变量比较晚 会出现没初始化就使用静态变量
这只是本人的说想到的. 在实际还没有具体遇到
static int i = 0;
这个的生存周期在 foo()这个函数内 如果单独调用上述简单的结构体 时可能初始化静态变量时会成功,
但是在一个项目中 有多个静态变量初始化会按照顺序执行 初始化可能不会在使用前就初始化.
还有一种可能是由于模板类型 是不确定 所以初始化静态变量比较晚 会出现没初始化就使用静态变量
这只是本人的说想到的. 在实际还没有具体遇到
#2
写的挺好的,应该不会遇到静态变量初始化顺序问题。
问题应该出现在其它地方。或者编译器不完全支持标准。vc2005应该不会有这个问题的,它高度符合标准。
#3
static函数不要放在类内实现。老的编译器会有一个不能正确实现"inline函数不inline时去重复"bug。
#4
单独看你这块代码没问题
#5
代码没有问题,
#6
effective C++
#7
最好按照标准的写法来.不要在类里实现
#8
应该先要定义一下吧
#9
不过又好像没问题
#10
多线程?