我刚刚读过,如果我想确定初始化顺序,最好使用一些将全局变量转换为本地(但仍然是静态)的函数,我的问题是,我需要保留一些标识符,告诉我我的静态对象已经被创建(函数中的标识符阻止我再次初始化static object
)或不是?因为我可以提前使用该功能在不同的地方,感谢初始化任何帮助初始化静态变量
Q
初始化静态变量
4
A
回答
0
至于标准而言,函数范围的静态变量的初始化只发生一次:
int *gettheint(bool set_to_four) {
static int foo = 3; // only happens once, ever
if (set_to_four) {
foo = 4; // happens as many times as the function is called with true
}
return &foo;
}
所以不需要gettheint
检查foo
是否已被初始化 - 在第二次和随后的调用中,该值不会被3
覆盖。
线程在作品中抛出扳手,超出了标准的范围。您可以检查线程实现的文档,但是有可能初始化的一次性在您的实现中不是线程安全的。这就是pthread_once
适用于或等同的。或者在多线程程序中,您可以在创建任何额外的线程之前调用该函数。
1
第一个问题是你的静态生命周期对象是否关心它们初始化的顺序?
如果属实,第二个问题是为什么?
如果全局对象在其初始化过程中(即构造函数运行时)使用另一个全局对象,初始化只是一个问题。注意:这是可怕的主动性,应该避免(不应该使用全局变量,如果它们是相互依赖的)。
如果它们必须链接,那么它们应该是相关的(在这种情况下,您可能会创建一个包含两个旧对象的新对象,以便您可以更精确地控制其创建)。如果这是不可能的,只需将它们放在同一个编译单元中(读取* .cpp文件)。
相关问题
- 1. 静态变量初始化
- 2. 静态变量初始化
- 3. 静态变量初始化
- 4. 在C99中使用静态变量初始化静态变量
- 5. php初始化静态变量与其他静态变量
- 6. C++是静态变量初始化= atomic?
- 7. 初始化自身静态变量的
- 8. 静态成员变量初始化C++
- 9. 初始化最终静态变量
- 10. 静态变量初始化顺序
- 11. 静态变量未初始化
- 12. 静态成员变量初始化
- 13. 静态只读变量初始化
- 14. 初始化静态最终变量
- 15. 静态变量初始化 - 澄清
- 16. PHP的静态变量初始化
- 17. 静态变量重新初始化
- 18. 如何让静态变量初始化
- 19. 静态变量未初始化
- 20. 静态变量的初始化顺序
- 21. 初始化静态final变量声明与初始化在Application.OnCreate()
- 22. 初始化后可以初始化静态变量吗?
- 23. 初始化静态向量
- 24. 静态局部变量和静态局部对象初始化
- 25. 静态初始化后声明静态变量
- 26. Java - 静态初始化与静态变量的默认值
- 27. 如何在JavaScript静态类中初始化静态变量?
- 28. 静态块VS中的静态变量初始化顺序
- 29. 静态初始化
- 30. 如何让静态变量初始化为全局变量
由于他没有提到它,我会说线程问题是50/50,因为大多数人都是Windows或gcc。只有那些勇敢的,被迫的人或知道他们现在所做的事情比现在更勇敢的人。由于gcc覆盖了这个问题,所以只有dev studio用户有问题。 – 2010-10-10 00:40:39